题目:
思路:
- 与上题不同的是,这次要求输出结果中与元素在两个数组中重复出现的次数一致,所以我们采用hashmap<K,V>.K代表num1中元素,V代表nums1中该元素出现的次数
- 检查数组的大小并对较小的数组进行哈希映射是一个小细节,当其中一个数组较大时,会减少内存的使用。
注意数组截取的方式(收藏里)
- 1.使用方法:System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度);
- 可以从任意位置开始截取,并放到任何位置
- 2.使用方法:java.util.Arrays.copyOf(源数组名称,新数组长度);
- 说明:从arr1数组中的一部分截取下来定义为一个新的数组.只能从头开始截取.
代码:
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
if (nums1.length > nums2.length ){
return intersect(nums2,nums1);
}
HashMap<Integer,Integer> map = new HashMap<>();
for (int i:nums1){
Integer index = map.getOrDefault(i,0);
map.put(i,index+1);
}
int k= 0;
for (int j:nums2){
int temp = map.getOrDefault(j,0);
if (temp > 0){
nums1[k++] = j;
map.put(j,temp-1);
}
}
return Arrays.copyOf(nums1,k);
}
}