刷题日记04
题目:存在重复元素
给你一个整数数组 nums
。如果任一值在数组中出现 至少两次 ,返回 true
;如果数组中每个元素互不相同,返回 false
示例 1:
输入:nums = [1,2,3,1] 输出:true
示例 2:
输入:nums = [1,2,3,4] 输出:false
这题我用了三种方法做,一种是我自己想的,两种是看了题解会的,因为我自己想的性能太差哈哈哈。
方法一:Map
这个想法是我根据我上次刷题想的,上次是查找数组中的多数,就用到了Map。这题我就参考了一下,遍历数组,对遍历到的数字进行判断,判断Map中是否有这个数子,没有就存进去并且值为1,有的话就把值加1。最后遍历这个Map,只要有一个键对应的值比1大就返回true。代码如下:
public static boolean containsDuplicate(int[] nums) { HashMap<Integer,Integer> hashMap = new HashMap<>(); for (int num : nums) { //判断num在map中是否出现 if (hashMap.containsKey(num)){ //出现过,就把值加1,代表出现次数加1 int count = hashMap.get(num); count++; hashMap.put(num,count); }else { hashMap.put(num,1); } } System.out.println(hashMap); //计数器 int cn = 0; //遍历map,找到值大于1的键 Set<Map.Entry<Integer, Integer>> entries = hashMap.entrySet(); for (Map.Entry<Integer, Integer> entry : entries) { if (entry.getValue() > 1){ return true; } } return false; }
方法二:排序
我先把数组增序排列,那相同的数字必然相邻,只要a[i] == a[i+1]就返回true,多简单的思路呀。代码如下
public static boolean containsDuplicate(int[] nums){ Arrays.sort(nums); for (int i = 0; i < nums.length - 1; i++) { if(nums[i] == nums[i+1]){ return true; } } return false; }
方法三:哈希表
我们遍历数组,把遍历到的数字存入到哈希表中,如果存的数组已存在就无法存入,则返回true。代码如下:
public static boolean containsDuplicate(int[] nums){ HashSet<Integer> set = new HashSet<>(); for (int i = 0; i < nums.length; i++) { if (!set.add(nums[i])){ return true; } } return false; }#如何看待2023届秋招##你的秋招进展怎么样了##我的求职思考##0offer是寒冬太冷还是我太菜#