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