算法面试2---查找问题

1 综述

查找问题可以分为两大类:(1)查找是否存在某一元素,此时常用的数据集合是set集合;(2)查找某一元素出现的频率,此时常用的数据集合是map集合。以LeetCode 349问题为例,注意说明中有一个不考虑输出结果的顺序,那么利用set集合就可以了。在解决具体问题时,可以具体考虑一些情况来优化代码:

class Solution {

    public int[] intersection(int[] nums1, int[] nums2) {
        //由于题目中说明了可以不考虑输出结果的顺序因此选用hashSet是最好的方案
        //这个方法返回的是数组,应该把集合中的元素再存成数组的形式
        Set<Integer> set = new HashSet<>();
        for (int i : nums1) {
            set.add(i);
        }

        List<Integer> list = new ArrayList<>();
        //在添加到set时就进行判断,这样比先添加完再进行比较时间复杂度更少
        for (int i : nums2) {
            if (set.contains(i)) {
                list.add(i);
                set.remove(i);
            }
        }
        int[] arr = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            arr[i] = list.get(i);
        }

        return arr;
    }
}

0

猜你喜欢

转载自www.cnblogs.com/youngao/p/11507074.html