image.png

解题思路

map

记录每一个元素出现的次数,使用map来记录nums1每一个元素出现的次数,之后将nums2中的元素与map进行比较

  1. public int[] intersect(int[] nums1, int[] nums2) {
  2. //map用来保存nums1中每个元素出现的次数
  3. Map<Integer,Integer> map = new HashMap<>();
  4. for(int i:nums1){
  5. //先获取map中的值 如果没有设为0
  6. int time = map.getOrDefault(i,0);
  7. //累加放回map
  8. map.put(i,time+1);
  9. }
  10. //记录交集的个数
  11. int index = 0;
  12. for(int i:nums2){
  13. //如果map中包含该元素并且出现次数大于等于1 记录下来
  14. if(map.containsKey(i)&&map.get(i)>=1){
  15. //使用nums1数组保存交集
  16. nums1[index++] = i;
  17. //说明已经被用掉了一个 需要减1
  18. map.put(i,map.get(i)-1);
  19. }
  20. }
  21. //返回nums1的一个copy
  22. return Arrays.copyOfRange(nums1, 0,index);
  23. }