当前位置: 首页 > news >正文

leetcode0287. 寻找重复数-medium

1 题目:寻找重复数

官方标定难度:中

2025-04-08

给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。

假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。

你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。

示例 1:

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

示例 2:

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

示例 3 :

输入:nums = [3,3,3,3,3]
输出:3

提示:

1 <= n <= 1 0 5 10^5 105
nums.length == n + 1
1 <= nums[i] <= n
nums 中 只有一个整数 出现 两次或多次 ,其余整数均只出现 一次

进阶:

1 如何证明 nums 中至少存在一个重复的数字?
2 你可以设计一个线性级时间复杂度 O(n) 的解决方案吗?

2 solution

这道题是找唯一重复的数字,而且范围是 [1, n],必须 不修改数组 nums 且只用常量级 O(1) 的额外空间。这样就给解决问题提供了一定的难度。再加上进阶要求,线性级时间复杂度 O(n) 。所以不能不能借助其他的结构存储数组。

本文中利用一个数字和一个位置的一一对应关系来解决,即如果不重复且有序的话,那么理论上数字 i 的位置应该为 i - 1。那我们从第一个数 a 开始,找到它正确的位置上的数 b 然后递归此过程,直到碰到了一个循环,如果正好是一个完整的环,则没有问题,因为它们只是交换了位置,此时继续找不在此环中的数即可。但是如果不是,说明有多个数对应同一个位置,则答案就出来了。

怎么标记找过的数?可以改成相反数,最后再改回来即可。
这样就可以在线性时间内找到重复的数,如果找不到,则没有重复的数,满足进阶的条件。

代码

class Solution {
public:

int findDuplicate(vector<int> &nums) {
    int ans = 0;
    for (int i = 0; i < nums.size(); i++) {
        if (nums[i] > 0) {
            int start = i;
            int x = start;
            while (nums[x] > 0) {
                int y = x;
                x = nums[x] - 1;
                nums[y] = -nums[y];
            }
            if (x != start) {
                ans = x + 1;
                break;
            }
        }
    }
    for (int &i: nums) if (i < 0) i = -i;
    return ans;
}

};

结果

在这里插入图片描述

相关文章:

  • 做网站要学宁波seo推广平台
  • 我的世界怎么做的好看视频网站网站注册域名
  • 做定制的B2b网站seo技术蜘蛛屯
  • 建设个人网站怎么推广网址
  • 德惠市住房城乡建设委官方网站推广渠道有哪些
  • 中山 网站推广网站页面的优化
  • 各种排序思路及实现
  • CentOS8.5 安装 LLaMA-Factory
  • 什么是强缓存和协商缓存?它们的工作原理是什么?
  • 软件工程面试题(三十七)
  • 2025年3月GESP C++四级等级考试真题——二阶矩阵
  • VBA将Word文档内容逐行写入Excel
  • WGAN-GP 原理及实现(pytorch版)
  • MySQL 备份与恢复:数据库的灾难保险计划
  • 兔单B细胞单抗制备服务
  • 蓝桥杯嵌入式十五届模拟二(串口DMA,占空比的另一种测量方式)
  • Python人工智能算法 基于遗传算法解决流水车间调度问题
  • (学习总结33)Linux Ext2 文件系统与软硬链接
  • js 效果展示
  • 机器学习 | 强化学习 vs 深度学习 vs 深度强化学习 | 概念向
  • 初入Web网页开发
  • 基于大模型的阵发性室上性心动过速风险预测与治疗方案研究
  • mySQL数据库和mongodb数据库的详细对比
  • LeetCode】寻找重复子树:深度解析与高效解法
  • Dynamics 365 Business Central Recurring Sales Lines 经常购买销售行 来作 订阅
  • 2025年美国CPI数据公布时间表