leecode349. 两个数组的交集

349. 两个数组的交集

leecode349. 两个数组的交集

本题做法是利用Hash表去除重复元素,然后用HashSet放重复元素,用一个数组输出。

我的本来思想是用两个容量为10数组分别标记两个数组存在的元素,存在则相应位置+1,最后把元素重复的位置全部变为1,即把不等于1且不等于0的元素变为1。然后将两个数组比较,将相等且为1的索引输出。但是问题是输出的数组不是动态的,在重复元素后会输出0元素,看了看答案感觉思想是对的,但是需要用HashSet来做。 

        class Solution {
        public int[] intersection(int[] nums1, int[] nums2) {
        int[] res = new int[10];
        Set<Integer> resSet = new HashSet<>();
        for (int i =0; i < nums1.length; i ++) {
            res[nums1[i]] ++;
            if (res[nums1[i]] != 0 && res[nums1[i]] != 1) {
                res[nums1[i]] = 1;
            }
        }
         for (int i : nums2) {
            if (nums1[i] == 1) {
                resSet.add(i);
            }
        }
        for (int j = 0; j < nums2.length; j ++) {
            tem[nums2[j]] ++;
            if (tem[nums2[j]] != 0 && tem[nums2[j]] != 1) {
                tem[nums2[j]] = 1;
            }
        }
        int[] ress = new int[resSet.size()];
        int index = 0;
        //将结果几何转为数组
        for (int i : resSet) {
            ress[index++] = i;
            }
        return ress
        }    

标准做法:

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) { 
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> resSet = new HashSet<>();
        //遍历数组1
        for (int i : nums1) {
            set1.add(i);
        }
        //遍历数组2的过程中判断哈希表中是否存在该元素
        for (int i : nums2) {
            if (set1.contains(i)) {
                resSet.add(i);
            }
        }
        int[] resArr = new int[resSet.size()];
        int index = 0;
        //将结果几何转为数组
        for (int i : resSet) {
            resArr[index++] = i;
        }
        return resArr;
        }
    }

上一篇:349. 两个数组的交集


下一篇:【日常练习题】合并两个有序数组