LeetCode刷题--两个数组的交集II

题目

代码

方法一:HashMap法

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
    Map<Integer,Integer> map = new HashMap<Integer,Integer>();
            List<Integer> list = new ArrayList<Integer>();
            for(int num:nums1){
                if(map.containsKey(num)){
                    map.put(num,map.get(num)+1);
                }else{
                    map.put(num,1);
                }
            }
            for(int num:nums2){
                if(map.containsKey(num)){
                    map.replace(num,map.get(num)-1);
                    if(map.get(num) == 0){
                        map.remove(num);
                    }
                    list.add(num);
                }
            }
            int[] nums = new int[list.size()];
            for (int i = 0; i <list.size() ; i++) {
                nums[i] = list.get(i);
            }
            return nums;
    }
}

方法二:排序指针法

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int index1 = 0, index2 = 0;
        int len1 = nums1.length;
        int len2 = nums2.length;
        List<Integer> list = new ArrayList<>();
        while(index1< len1 && index2 < len2){
            if(nums1[index1] == nums2[index2]){
                list.add(nums1[index1]);
                index1++;
                index2++;
            }else if(nums1[index1] < nums2[index2]){
                index1++;
            }else {
                index2++;
            }
        }
        int[] nums = new int[list.size()];
        for (int i = 0; i <list.size() ; i++) {
            nums[i] = list.get(i);
        }
        return nums;
    }
}

解题思想

方法一:遍历第一个数组将第一个集合的元素作为hashmap的键,该元素出现的次数作为hashmap的值;遍历第二个数组的元素并查询元素是否出现在hashmap中,如果出现一次,则将该元素添加到列表list中数组中,并将hash值-1,只到hash值减为0,就将该键删除。最后输出将list的元素添加到数组中做输出
方法二:先将两个数组排序,设置两个指针index1和index2,比较两个指针指向的元素,如果相等将该元素添加到列表list中,两个指针自增,否则指针指向元素值小的那个指针自加,值大的不变。直到指针指向元素较少的数组的最后一个元素。

举例说明

原文地址:https://www.cnblogs.com/sinlearn/p/13423185.html