LeetCode 存在重复

本文介绍了一种检测数组中是否存在重复元素的方法,通过使用HashSet数据结构实现高效查找,并提供了示例代码及不同算法的时间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

示例 1:

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

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

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

解答

class Solution {
    public boolean containsDuplicate(int[] nums) {
        int length = nums.length;
        // 当数组长度为0和1时不可能重复
        if(length == 0 || length == 1) {
            return false;
        }
        
       Set<Integer> set = new HashSet<Integer>();
        for(int x = 0; x <= length - 1; x++) {
            if(set.contains(nums[x])) {
                return true;
            } else {
                set.add(nums[x]);
            }
        }
        
       // for(int x = 0; x < length - 1; x++) {
       //     for(int y = x + 1; y <= length - 1; y++) {
       //         if(nums[x] == nums[y]) {
       //             return true;
       //         }
       //     }
       // }
        
        // quickSort(nums, 0, length - 1);
        
        // for(int x = 1; x < length; x++) {
        //     if(nums[x - 1] == nums[x]) {
        //         return true;
        //     }
        // }
        return false;
    }
    
    // 快排
    public void quickSort(int[] nums, int start, int end) {
        if(start < end) {
            int i = start;
            int j = end;
            int tmp = nums[i];
            while(i < j) {
                while(j > i && nums[j] >= tmp) j--;
                // 交换
                nums[i] = nums[j];
                while(i < j && nums[i] <= tmp) i++;
                // 交换
                nums[j] = nums[i];
            }
            nums[i] = tmp;
            // 递归调用左边
            quickSort(nums, start, i - 1);
            // 递归调用右边
            quickSort(nums, i + 1, end);
        }
        
    }
}

思路

这题拿到手最简单的想法就是
1.双重for循环遍历比较,时间复杂度为O(n^2)
2.另外一种为使用hash表来存储, 判断hash表中是否有重复的值
3.先排序,因为排序过后是有序数组,然后在比较相邻两个数是否相等,这里用的是快速排序,遗憾的是这个方法提交失败,说超时,快排也不一定快啊,如果已经是有序数组,这个时间复杂度最差为O(n^2),另外快排的平均时间复杂度为
O(nlogn)
4.使用Arrays.sort()方法先排序,跟3差不多,我觉得出题者意思肯定不是让你用api的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值