leetcoce 349. 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-two-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
采用map(用其中长度短的来,可以减少内存)来记录其中一个数组,之后遍历另一个数组,看其中是否有此数字。注意的是第二个数组中是否有重复的数字,需要去重。
public int[] intersection(int[] nums1, int[] nums2) { if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) { return new int[0]; } int l1 = nums1.length; int l2 = nums2.length; int[] a; int[] b; if (l1 > l2) { l1 = l2; a = nums2; b = nums1; } else { a = nums1; b = nums2; } int size = (l1 << 1) <= 0 ? Integer.MAX_VALUE : (l1 << 1); int[] arr = new int[l1]; Map<Integer, Integer> map = new HashMap<>(size); for (int key : a) { map.putIfAbsent(key, 1); } int i = 0; for (int key : b) { Integer integer = map.get(key); if (integer != null && integer == 1) { arr[i++] = key; // 去重准备 map.put(key, 2); } } if (i == 0) { return new int[0]; } return Arrays.copyOfRange(arr, 0, i); }
事件复杂度和空间复杂度都是中等。