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

287. 寻找重复数

由于题目规定数组中的数的范围是1-n,因此可以构造出下标n和值nums[n]的映射f(n),然后构成一个链表,当有重复数字时,链表存在环,找到重复数字即找到链表环的入口,参考142. 环形链表II。

class Solution {
    public int findDuplicate(int[] nums) {
        int slow = 0, fast = 0;
        int n = nums.length;
        while (fast < n && nums[fast] < n) {
            slow = nums[slow];
            fast = nums[nums[fast]];
            if (slow == fast) break;
        }
        int p = 0;
        while (true) {
            if (p == slow) break;
            p = nums[p];
            slow = nums[slow];
        }
        return p;
    }
}

http://www.kler.cn/a/587965.html

相关文章:

  • Python实现万年历
  • DAY34 贪心算法Ⅲ
  • C++模版(复习)
  • C++|类和对象
  • Android 拍照开发——移动虚拟机摄像头
  • java简单基础学习
  • 关于离子滤波小记
  • 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)
  • RabbitMQ:业务幂等、死信交换机
  • C++基础——从C语言快速入门
  • matlab 自适应模糊PID在反应釜温度控制中的应用
  • 每日定投40刀BTC(9)20250312 - 20250315
  • Python 鼠标轨迹算法 - 防止游戏检测
  • Unity小框架之单例模式基类
  • 掌阅iReader全球首款 7 英寸 Carta 1300 墨水屏阅读器即将发布
  • Starship:快速且高度可定制的命令行框架!!
  • 线段树解析题型
  • android 新闻客户端和springboot后台开发(二)
  • linux——计算机内存详解通俗理解
  • CmBacktrace的cmb_cfg.h