1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| import java.util.*;
public class _350两个数组的交集II { public int[] intersect(int[] nums1, int[] nums2) { int[] numsIdx = new int[1001]; int[] ans = new int[1001]; for (int num : nums1) { numsIdx[num]++; } int index = 0; for (int i : nums2) { if (numsIdx[i] > 0) { numsIdx[i]--; ans[index++] = i; } } return Arrays.copyOf(ans, index); }
public int[] intersect_min(int[] nums1, int[] nums2) { Map<Integer, Integer> map1 = new HashMap<>(); for (int num : nums1) { map1.put(num, map1.getOrDefault(num, 0) + 1); } List<Integer> temp = new ArrayList<>(); for (int num : nums2) { if (map1.isEmpty()) break; if (map1.containsKey(num)) { Integer cnt = map1.get(num); temp.add(num); if (cnt == 1) { map1.remove(num); } else { map1.put(num, cnt - 1); } } } int[] res = new int[temp.size()]; for (int i = 0; i < temp.size(); i++) { res[i] = temp.get(i); } return res; }
public int[] intersect_sort(int[] nums1, int[] nums2) { Arrays.sort(nums1); Arrays.sort(nums2); List<Integer> temp = new ArrayList<>(); int i = 0, j = 0, len1 = nums1.length, len2 = nums2.length; while (i < len1 && j < len2) { if (nums1[i] < nums2[j]) { i++; } else if (nums1[i] > nums2[j]) { j++; } else { temp.add(nums1[i]); i++; j++; } } int[] res = new int[temp.size()]; for (i = 0; i < temp.size(); i++) { res[i] = temp.get(i); } return res; }
public int[] intersect_area(int[] nums1, int[] nums2) { Map<Integer, Integer> map1 = new HashMap<>(); Map<Integer, Integer> map2 = new HashMap<>(); int len1 = nums1.length, len2 = nums2.length; for (int i = 0; i < len1; i++) { map1.put(nums1[i], map1.getOrDefault(nums1[i], 0) + 1); } for (int i = 0; i < len2; i++) { map2.put(nums2[i], map2.getOrDefault(nums2[i], 0) + 1); } List<Integer> temp = new ArrayList<>(); int cnt = 0; for (Integer num : map1.keySet()) { cnt = Math.min(map2.getOrDefault(num, 0), map1.get(num)); for (int i = 0; i < cnt; i++) { temp.add(num); } } int[] res = new int[temp.size()]; for (int i = 0; i < temp.size(); i++) { res[i] = temp.get(i); } return res; }
}
|