首页 > 其他分享 >寻找重复数(二分查找)

寻找重复数(二分查找)

时间:2025-01-11 11:21:22浏览次数:1  
标签:二分 示例 重复 nums 整数 查找 数组

给定一个包含 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

 

思路:此题的重点是:包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),要利用好这个性质,利用二分查找时,查找的不是数组nums,而是0到n-1这些数中哪个是重复的数。

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int l=0,r=nums.size()-1,cnt=0,result=-1;
        while(l<=r){
            int mid = l+(r-l)/2;
            cnt=0;
            //要利用题目中的这个性质:
            //给定一个包含 n + 1 个整数的数组 nums 
            //其数字都在 [1, n] 范围内(包括 1 和 n)
            for(int i=0;i<nums.size();i++){
                if(nums[i]<=mid){
                    cnt++;
                }
            }
            if(cnt<=mid){//说明mid左边没有重复的数,在右边找
                l=mid+1;
            }else{//说明mid左边就有重复的数,且mid可能就是重复的数,继续在左边找
                result = mid;
                r=mid-1;
            }
        }
        return result;
    }
};

 

标签:二分,示例,重复,nums,整数,查找,数组
From: https://www.cnblogs.com/yueshengd/p/18665399

相关文章

  • 二分+排序
    https://codeforces.com/contest/2053/problem/Dhttps://blog.csdn.net/weixin_61825750/article/details/144799098#include<bits/stdc++.h>#definelcp<<1#definercp<<1|1#defineINF2e9usingnamespacestd;#defineendl'\n'us......
  • 【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操
    文章目录S06L22Search,Find,andReplace-PartOne1从光标位置起,正向定位到当前行的首个字符b2从光标位置起,反向查找某个字符3重复上一次字符查找操作4定位到目标字符的前一个字符5单字符查找与Vim命令的组合6跨行查找某字符串7Vim的增量查找8Vim搜索的......
  • Excel 技巧06 - 如何删除重复数据 (★★)
    本文讲了如何在Excel中删除重复数据。1,如何删除重复数据Menu>数据>高级点将筛选结果复制到其他位置点列表区域,然后选中对象单元格区域点复制到,然后选对象先单元格(E3)选中筛选不重复的记录然后点确定这样就将不重复数据给复制到E列。以前我是用SakuraEdit......
  • LeetCode:83.删除排序链表中的重复元素
    LeetCode:83.删除排序链表中的重复元素classListNode{constructor(val,next){this.val=(val===undefined?0:val)this.next=(next===undefined?null:next)}}vardeleteDuplicates=function(head){letp=head//head......
  • 冒险数据结构:峰谷序列(动态序列查找问题)
    先考虑这么一个问题:    如何求出一个序列在所有位置上的各个元素的前面和后面第一个比它小的元素位置。显然这个问题可以用单调栈来解决。        如上图所示,维护一个单调递增的序列,每当栈顶>当前元素时,就抛出栈顶,这时就找到了栈顶元素后面第一个小于它的......
  • linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包
    关于文件的关键词创建touch删除rm复制cp权限chmod移动mv查看内容cat(全部);head(前10行);tail(末尾10行);more,less查找  find压缩 gzip; bzip打包tar 编辑sed创建文件格式:touch文件名删除文件复制文件移动文件查看文件内......
  • Java实现生成永不重复的数字方案详解
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者......
  • LeetCode算法题:删除排序链表中的重复元素
    题目描述下面是给定的一段代码 /***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*ListNode(intval){this.val=val;}*ListNode(intval,ListNodenext){this.val......
  • 在Windows操作系统中,有时会需要查找隐藏的用户账户名称。这些用户账户可能是由系统创
    编辑Windows注册表来隐藏用户账户的技巧实际上是对Windows登录过程的深度定制。通过修改注册表,系统可以控制哪些账户在登录界面显示或隐藏。这种方法并不修改用户账户本身的存在,而是通过修改系统设置使得账户在图形用户界面(GUI)上不可见。底层原理:Windows登录与账户显示机制......
  • wqs二分的一些性质和细节
    wqs二分共线情况的处理在我们进行\(wqs\)二分时,需要要求函数是具有凸性的,但是有时候最终所求的点在函数上可能和前后的几个点共线,这时我们在应该如何更新答案呢?此时的取值方式和你二分的\(check\)写法有关。我们以上凸壳为例:\(check\)会对每个斜率求出一个转移的次数。......