刷题日记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是寒冬太冷还是我太菜#
全部评论

相关推荐

2024-12-11 14:09
已编辑
中国海洋大学 数值策划
点赞 评论 收藏
分享
评论
33
2
分享
牛客网
牛客企业服务