思路:
public int[] intersect(int[] nums1, int[] nums2) {
if (nums1.length > nums2.length) {
return intersect(nums2, nums1);
}
HashMap<Integer, Integer> m = new HashMap<>();
for (int n : nums1) {
m.put(n, m.getOrDefault(n, 0) + 1);
}
int k = 0;
for (int n : nums2) {
int cnt = m.getOrDefault(n, 0);
if (cnt > 0) {
nums1[k++] = n;
m.put(n, cnt - 1);
}
}
return Arrays.copyOfRange(nums1, 0, k);
}
关于 getOrDefault()方法:
如果map中含有指定的key,就返回该key对应的value,否则使用该方法的第二个参数作为默认值返回。
getOrDefault的默认值的生效条件并不是get的值为null,而是containsKey的结果为false。