LeetCode22-06-14_1、存在重复元素

       给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false

示例 1:

输入:nums = [1,2,3,1]
输出:true
示例 2:

输入:nums = [1,2,3,4]
输出:false
示例 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/contains-duplicate
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

自己第一道题,挑战失败!!!!

       想法一步步来,开始想的是拿出一个数挨个和剩下比较,看是否有相等,直觉比较次数太多,放弃上手。

       之后看了下标签,有排序字眼,排序后进行比较相邻元素,可尝试。排序算法只记得一种Bubble,尴尬了,印象他是流量款,最基础,能拍,但时间复杂度比较高O(n^2)。不过其他的插入排序,堆排序,桶排序都忘干净了,刚刷完视频过来,所以通过刷题一点点积累方法吧。

       1、冒泡尝试

class Solution {
    public boolean containsDuplicate(int[] arr) {
        for(int i = 0; i < arr.length - 1; i++){
            for(int j = 0; j < arr.length - 1 - i; j++){
                if(arr[j] > arr[j + 1]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        boolean flag = false;
        for(int i = 0; i < arr.length - 1; i++){
            if(arr[i] == arr[i + 1]){
                flag = true;
                break;
            }
        }
        return flag;
    }
}

       示例测试通过,提交执行结果:超出时间限制查看数据,长长长长长长长长长长,作为小白的我,想也应该是时间复杂度太高了。

       有点尬尴 ,其他代码和想法想不出来,刚开始的话,积累一些编程范式和基本套路也好,就去看题解了。

       2、Arrays.sort()排序后比较相邻元素

class Solution {
    public boolean containsDuplicate(int[] nums){
        Arrays.sort(nums);
        boolean flag = false;
        for(int i = 0; i < nums.length - 1; i++){
            if(nums[i] == nums[i + 1]){
                flag = true;
                break;
            }
        }
        return flag;
    }
}

       发现用的Arrays.sort()排序,自己也想过直接将数组元素存入List,但忘记排序方法如何调用了,有点可惜,基础有待加强。打开IDEA,查看了这个方法是 DualPivotQuicksort.sort()双轴快速排序,既然题解直接用了,咱也就当个技巧,站在巨人肩膀上能眺得更远,心存感激。

        3、哈希表

       使用add()方法,能添加不重复元素,并且可添加时返回true,已有元素,不能重复添加时返回false。速度快,若用实现类用TreeSet代替HashSet会降低速度,因为TreeSet会有自然排序耗时,而HashSet用Hash算法得到数据的Hash值,之后找到数据在Hash表中的位置,判断是否可存入即可。

class Solution {
        public boolean containsDuplicate(int[] nums){
            Set<Integer> set = new HashSet<Integer>();
            for(int i : nums){
                if(!set.add(i)){
                    return true;
                }
            }
            return false;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值