349, 350. Intersection of Two Arrays | & ||
Intersection of Two Arrays
Given two arrays, write a function to compute their intersection.
Example
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2]
.
分析:
这种考察一个数是否存在另一个集合中,一般来讲,都会用到HashSet. 如果不允许用额外的存储空间,可以对nums1排序,然后使用二分查找。
1 public class Solution { 7 public int[] intersection(int[] nums1, int[] nums2) { 8 if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) { 9 int[] arr = new int[0]; 10 return arr; 11 } 12 13 Set<Integer> set = new HashSet<>(); 14 for (int i : nums1) { 15 set.add(i); 16 } 17 18 List<Integer> list = new ArrayList<>(); 19 20 for (int i : nums2) { 21 if (set.contains(i)) { 22 list.add(i); 23 set.remove(i); 24 } 25 } 26 27 return list.stream().mapToInt(i->i).toArray(); 28 }
Intersection of Two Arrays II
Given two arrays, write a function to compute their intersection.
Example
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2, 2]
.
这一次需要把所有的都找出来,可以用HashMap<Integer, Integer> 来存储,第一个Integer指的是数,第二个指的是那个数存在的个数。
1 public class Solution { 2 public int[] intersect(int[] nums1, int[] nums2) { 3 if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) { 4 int[] arr = new int[0]; 5 return arr; 6 } 7 8 Map<Integer, Integer> map = new HashMap<>(); 9 for (int i : nums1) { 10 map.put(i, map.getOrDefault(i, 0) + 1); 11 } 12 13 ArrayList<Integer> list = new ArrayList<>(); 14 15 for (int i : nums2) { 16 if (map.containsKey(i) && map.get(i) >= 1) { 17 list.add(i); 18 map.put(i, map.get(i) - 1); 19 } 20 } 21 return list.stream().mapToInt(i->i).toArray(); 22 } 23 }
转载请注明出处:cnblogs.com/beiyeqingteng/