首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【LeetCode100】--- 寻找重复数

【LeetCode100】--- 寻找重复数

作者头像
用户11288958
发布2025-01-21 12:49:33
发布2025-01-21 12:49:33
2590
举报
文章被收录于专栏:学习学习

题目传送门

方法一:暴力解法(超时)

算法原理

双重循环,每次固定一个数,再遍历别的数。比较这两个数是否相等, 若相等则返回这个数。就是重复数。

复杂度分析

时间复杂度:O(N方) 空间复杂度:O(1)

代码:

代码语言:javascript
复制
class Solution {
    public int findDuplicate(int[] nums) {
        int n = nums.length;

        for(int i = 0; i < n-1; i++){
            for(int j = i+1; j < n; j++){
                if(nums[i] == nums[j]){
                    return nums[i];
                }
            }
        }
        return -1;
    }
}

方法二:哈希表(数组模拟)

算法原理

建立一个大小为n的数组,用来模拟哈希表。 以各个数字作为下标,来统计各个数字出现的次数。 最终遍历这个哈希数组,若有大于1的数,则返回这个下标就是重复出现的数字。

代码:

代码语言:javascript
复制
class Solution {
    public int findDuplicate(int[] nums) {
        int n = nums.length;
        int[] hash = new int[n];

        for(int i = 0; i < n; i++){
            hash[nums[i]]++;
        }

        for(int i = 0; i < n; i++){
            if(hash[i] > 1){
                return i;
            }
        }
        return -1;
    }
}

复杂度分析

时间复杂度:O(N) 为这个数组的长度 空间复杂度:O(N)为这个数组的长度

方法三:哈希表(HashSet)

算法原理

创建HashSet这个哈希表。遍历数组,如果这个数字在哈希表中出现了,那么就返回这个数 如果没有出现,那么就将这个数添加到哈希表中。

代码语言:javascript
复制
class Solution {
    public int findDuplicate(int[] nums) {
        Set<Integer> seen = new HashSet<>();

        for(int n : nums){
            if(seen.contains(n)){
                return n;
            }
            seen.add(n);
        }
        return -1;
    }
}

复杂度分析

时间复杂度:O(N) 为这个数组的长度,遍历的时候为n次 空间复杂度:O(N)为这个数组的长度

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目传送门
  • 方法一:暴力解法(超时)
    • 算法原理
    • 复杂度分析
    • 代码:
  • 方法二:哈希表(数组模拟)
    • 算法原理
    • 代码:
    • 复杂度分析
  • 方法三:哈希表(HashSet)
    • 算法原理
    • 复杂度分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档