哈希表 04

46 阅读1分钟

LeetCode 350

原题链接

解题思路

将nums1存入到一个HashMap里面,键是数组里的元素,值是该元素出现的次数
接下来遍历nums2,依次到Map里面去查找,看是否有出现,如果出现了,就
放到结果数组中,然后出现次数(值)减一,直到为0

这种思路的前提是nums1比nums2长,所以nums2更长时,要交换数组。

代码如下:

public class test {
	public int[] intersect(int[] nums1, int[] nums2) {
		if (nums1.length > nums2.length) {
			return intersect(nums2, nums1);
		}
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		for (int num : nums1) {
			int count = map.getOrDefault(num, 0) + 1;
			map.put(num, count);
		}
		int[] intersection = new int[nums1.length];
		int index = 0;
		for (int num : nums2) {
			int count = map.getOrDefault(num, 0);
			if (count > 0) {
				intersection[index++] = num;
				count--;
				if (count > 0) {
					map.put(num, count);
				} else {
					map.remove(num);
				}
			}
		}
		return Arrays.copyOfRange(intersection, 0, index);
	}
}