首页 > 其他分享 >寻找重复数

寻找重复数

时间:2024-01-30 23:12:46浏览次数:28  
标签:slow nums 重复 寻找 fast int while

287. Find the Duplicate Number (Medium)

给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。

示例 1:

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

示例 2:

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

说明:

  1. 不能更改原数组(假设数组是只读的)。
  2. 只能使用额外的 O(1) 的空间。
  3. 时间复杂度小于 O(n2) 。
  4. 数组中只有一个重复的数字,但它可能不止重复出现一次。
//思路一:二分查找解法
public int findDuplicate(int[] nums) {
     int l = 1, h = nums.length - 1;
     while (l <= h) {
         int mid = l + (h - l) / 2;
         int cnt = 0;
         for (int i = 0; i < nums.length; i++) {
             if (nums[i] <= mid) cnt++;
         }
         if (cnt > mid) h = mid - 1;
         else l = mid + 1;
     }
     return l;
}
//思路二:双指针解法,类似于有环链表中找出环的入口
//参考 141 、142
//思路:注意说明里面的要求
public int findDuplicate(int[] nums) {
    // nums 的长度是(n+1),元素的范围在[1,n]之间
    int slow = nums[0];
    int fast = nums[0]; 

    while(true){
        slow = nums[slow];
        fast = nums[nums[fast]];
        if(slow == fast){
            break;
        }
    }

    slow = nums[0];
    while(slow != fast){
        slow = nums[slow];
        fast = nums[fast];
    }
    return slow;
}

参考:

标签:slow,nums,重复,寻找,fast,int,while
From: https://www.cnblogs.com/i9code/p/17998189

相关文章

  • Qt/C++音视频开发64-共享解码线程/重复利用解码/极低CPU占用/画面同步/进度同步
    一、前言共享解码线程主要是为了降低CPU占用,重复利用解码,毕竟在一个监控系统中,很可能打开了同一个地址,需要在多个不同的窗口中播放,形成多屏渲染的效果,做到真正的完全的画面同步,在主解码线程中切换了播放进度,所有关联的同一个解码线程的播放窗体也会立即同步画面,使得感官上看起来......
  • 快乐学Python,如何对数据进行清洗?(缺失值处理和重复值删除)
    上一篇文章中,我们介绍了通过pandas读取数据到DataFrame中之后,对DataFrame中数据的操作方式,这篇文章我们继续来介绍:数据清洗。即:当读取的数据出现缺失或异常时,我们如何对缺失的数据进行预处理。1、缺失值是什么?当我们从数据文件(CSV、Excel等)或者其他数据源加载到DataFrame中时,往......
  • 布隆过滤器和寻找嫌疑人
    布隆过滤器,听过也学过,实际中没怎么用到,时间长了再接触这个概念就陌生了,说到底还是没有彻底掌握。为了真正理解一项技术或一个概念,最好还是从问题出发,所以布隆过滤器到底解决了什么问题呢?布隆过滤器可以用来检测一个元素是否属于某个集合。上面的定义比较抽象,下面有些具体的例......
  • php网页开发和漏洞寻找
    前言:放寒假了,之前一直在准备期末,没什么时间学技术和写博客,最近有空了会写一些。本篇博客将接着之前的内容介绍利用php搭建博客的一些步骤,从网页开发角度分析一些常用漏洞的产生。学安全首先要会开发1.1操作数据库php作为一门编程语言,是无法直接与数据库进行交互的,想要进行该......
  • 82. 删除排序链表中的重复元素 II(中)
    目录题目题解:双指针题目给定一个已排序的链表的头head,删除原始链表中所有重复数字的节点,只留下不同的数字。返回已排序的链表。题解:双指针题目给的头节点是第一个元素,处理起来较麻烦(需单独处理头节点);加上习惯用一个空的头节点,所以本题新建了一个虚拟头节点,以便统一......
  • MySQL 处理重复数据
    有些MySQL数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据。防止表中出现重复数据你可以在MySQL数据表中设置指定的字段为PRIMARYKEY(主......
  • 80. 删除有序数组中的重复项 II(中)
    目录题目题解:双指针题目给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。说明:为什么返回数值是整数,但输......
  • 事务的隔离级别及脏读,不可重复读,幻读等问题
    事务隔离级别以及对应的问题如上所示。读未提交:在修改数据时在没有提交时就修改了数据库,如果修改回滚则又修改为原值,这样的话在修改与回滚之间读取的数据就是不准确的,会产生脏读现象。脏读现象是读取到未修改的数据,即是数据逻辑上不存在的数据(因为回滚未提交),而下面产生的问题均......
  • jmeter读取csv文件控制多线程不重复读取
    在Jmeter中设置并发为S,循环次数为N时,参数化文件可能被重复读取N次,无法保证每次读取的数据均不一样,此处介绍保证数据不重复的方法。在线程组下添加一个CSVDataSetConfig,具体配置如下图:将配置中默认:RecycleonEOF=True,StopthreadonEOF=False修改为:RecycleonEO......
  • 用Python实现高效数据记录!Web自动化技术助你告别重复劳动!
    测试管理班是专门面向测试与质量管理人员的一门课程,通过提升从业人员的团队管理、项目管理、绩效管理、沟通管理等方面的能力,使测试管理人员可以更好的带领团队、项目以及公司获得更快的成长。提供1v1私教指导,BAT级别的测试管理大咖量身打造职业规划。简介关键数据记录是We......