Try   HackMD

2215.Find the Difference of Two Arrays

tags: Easy,Array,Hash Table

2215. Find the Difference of Two Arrays

題目描述

Given two 0-indexed integer arrays nums1 and nums2, return a list answer of size 2 where:

  • answer[0] is a list of all distinct integers in nums1 which are not present in nums2.
  • answer[1] is a list of all distinct integers in nums2 which are not present in nums1.

Note that the integers in the lists may be returned in any order.

範例

Example 1:

Input: nums1 = [1,2,3], nums2 = [2,4,6]
Output: [[1,3],[4,6]]
Explanation:
For nums1, nums1[1] = 2 is present at index 0 of nums2, whereas nums1[0] = 1 and nums1[2] = 3 are not present in nums2. Therefore, answer[0] = [1,3].
For nums2, nums2[0] = 2 is present at index 1 of nums1, whereas nums2[1] = 4 and nums2[2] = 6 are not present in nums2. Therefore, answer[1] = [4,6].

Example 2:

Input: nums1 = [1,2,3,3], nums2 = [1,1,2,2]
Output: [[3],[]]
Explanation:
For nums1, nums1[2] and nums1[3] are not present in nums2. Since nums1[2] == nums1[3], their value is only included once and answer[0] = [3].
Every integer in nums2 is present in nums1. Therefore, answer[1] = [].

Constraints:

  • 1 <= nums1.length, nums2.length <= 1000
  • -1000 <= nums1[i], nums2[i] <= 1000

解答

TypeScript

function findDifference(nums1: number[], nums2: number[]): number[][] { const set1 = new Set(nums1); const set2 = new Set(nums2); set1.forEach((item) => { if (set2.has(item)) { set2.delete(item); set1.delete(item); } }); return [[...set1], [...set2]]; }

SheepWed, May 3, 2023

Javascript

function findDifference(nums1, nums2) { const set1 = new Set(nums1); const set2 = new Set(nums2); for (const item of set1) { if (set2.has(item)) { set1.delete(item); set2.delete(item); } } return [[...set1], [...set2]]; }

慚愧,跟我弟學習了,本來用set1去刪set2然後再用set2刪set1,不止要做兩遍還要多建一個set根本87
MarsgoatWed, May 3, 2023

Python

class Solution: def findDifference(self, nums1: List[int], nums2: List[int]) -> List[List[int]]: return [list(set(nums1) - set(nums2)), list(set(nums2) - set(nums1))]

Ron ChenWed, May 3, 2023

C#

public IList<IList<int>> FindDifference(int[] nums1, int[] nums2) { HashSet<int> set1 = new HashSet<int>(nums1); HashSet<int> set2 = new HashSet<int>(nums2); foreach(int num in set2) { if (set1.Contains(num)) { set1.Remove(num); set2.Remove(num); } } return new List<IList<int>>(){ set1.ToList(), set2.ToList()}; }

JimWed, May 3, 2023

Java

class Solution { public List<List<Integer>> findDifference(int[] nums1, int[] nums2) { Set<Integer> set1 = new HashSet<>(); Set<Integer> set2 = new HashSet<>(); for(Integer num : nums1) { set1.add(num); } for(Integer num : nums2) { set2.add(num); } Set<Integer> difference1 = new HashSet<>(set1); difference1.removeAll(set2); Set<Integer> difference2 = new HashSet<>(set2); difference2.removeAll(set1); List<List<Integer>> ans = new ArrayList<>(); ans.add(difference1.stream().toList()); ans.add(difference2.stream().toList()); return ans; } }

只能醜醜寫的我
Ron ChenWed, May 3, 2023

class Solution { public List<List<Integer>> findDifference(int[] nums1, int[] nums2) { Set<Integer> set1 = Arrays.stream(nums1).boxed().collect(Collectors.toSet()); // Delete nums2 element which in set1 and assign to set2 Set<Integer> set2 = Arrays.stream(nums2).filter(n -> !set1.contains(n)).boxed().collect(Collectors.toSet()); // Delete set1 element which in nums2 Arrays.stream(nums2).forEach(set1::remove); return Arrays.asList(new ArrayList<>(set1), new ArrayList<>(set2)); } }

解答區看到的 Java Stream API 用法,太猛了

Reference

回到題目列表