287. 寻找重复数 Python

文章目录


一、题目描述

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

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

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

示例 1

复制代码
输入:nums = [1,3,4,2,2]
输出:2

示例 2

复制代码
输入:nums = [3,1,3,4,2]
输出:3

二、代码

代码如下:

c 复制代码
class Solution:
    def findDuplicate(self, nums: List[int]) -> int:
        n = len(nums)
        left, right = 0, n
        while left < right:
            k = (left + right) // 2
            count = sum(num <= k for num in nums)   # nums中 <=k 的元素个数
            if count <= k:      # 目标元素在k右侧
                left = k+1
            else:
                right = k
        return right

三、解题思路

本题要求查找数组中重复的那个数,由于题意要求不能修改数组且只能使用常量级 O(1) 的额外空间,所以采用空间换效率的方法不太适合,采用先排序后查找的方法也不满足条件。但是由于本题中题意给出的条件是数组中的每一个元素肯定是属于[1, n] 范围内的(包括 1n)且有且仅有1个数是重复的,那么可以采用二分法的思路去寻找重复的数,具体思路如下:

设一个数字k∈[1, n] ,统计数组中小于等于k的数字的 个数 count

count<=k,说明重复数字一定在(k,n−1]的范围内。

count>k,说明重复数字一定在[0,k]的范围内。

而实际上,k的选取就是二分查找中的中间值。最终如果左坐标left等于右坐标right,说明找到了重复的数,返回left或者right即可。

相关推荐
CoovallyAIHub2 分钟前
化工厂气体泄漏怎么用AI检测?30张图3D重建气体泄漏场景——美国国家实验室NeRF新研究
深度学习·算法·计算机视觉
Flittly15 分钟前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(6)Context Compact (上下文压缩)
python·agent
曲幽11 小时前
FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
python·sql·postgresql·fastapi·web·postgres·db·asyncpg
颜酱12 小时前
图的数据结构:从「多叉树」到存储与遍历
javascript·后端·算法
用户83562907805116 小时前
使用 C# 在 Excel 中创建数据透视表
后端·python
zone773917 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
码路飞19 小时前
FastMCP 实战:一个 .py 文件,给 Claude Code 装上 3 个超实用工具
python·ai编程·mcp
CoovallyAIHub20 小时前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub20 小时前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉
CoovallyAIHub20 小时前
Claude Code 突然变成了 66 个专家?这个 5.8k Star 的开源项目,让我重新理解了什么叫"会用 AI"
深度学习·算法·计算机视觉