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

LeetCode 287. 寻找重复数

 题目描述  

给定一个包含 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.二分查找

解题思路

      题目给出nums包含 n + 1 个整数,其数字都在 [1, n] 范围内。可以用二分查找法,一步步判断重复数字,是处于[1,mid]和[mid+1,n]两个区间中的哪个区间,每次判断都需要遍历一遍数组,统计在[1,mid]区间中的数字个数cnt,如果cnt大于区间内的元素数量,那么这个重复元素一定在[1,mid]这个区间内,根据二   分法缩小区间;反之亦然,最后min所指的元素,就是重复元素。

        虽然nuns不是有序数组,但是我们可以想象一个[1,2,3...n]这样的有序数组,来使用二分查找,而且空间复杂度为O(1)。

class Solution {
public:int findDuplicate(vector<int>& nums) {int min = 1,max = nums.size();while(min < max){int mid = (min + max) / 2;int cnt = 0;for(auto v : nums){if(v >= min && v <= mid) cnt ++;}if(cnt > mid - min + 1){max = mid;}else{min = mid + 1;}}return min;}
};

        时间复杂度O(NLogN),空间复杂度O(1)

http://www.dtcms.com/a/553708.html

相关文章:

  • C#理论学习-WinForm实践开发教程总结
  • 深入浅出 ES Module
  • 深度学习专题:模型训练的数据并行(二)
  • 企业网站建设方案新闻网站购买域名
  • C++ STL 有序关联容器高频面试题解析
  • 腾讯风铃怎么做网站成都哪家做网站
  • 二叉树核心算法分类精讲:选择、遍历与结构关系
  • 【人工智能系列:走近人工智能05】基于 PyTorch 的机器学习开发与部署实战
  • Arbess零基础学习,创建第一条流水线
  • Linux DNS 深度解析与最佳实践
  • RGB转换为NV12,查表式算法
  • PostIn零基础学习,创建第一个项目
  • 百度网站优化排行做响应式网站应该注意什么
  • 女生化妆品网站建设规划书该网站的域名为
  • 基于NvVideoEncoder的H265视频编码器
  • 淄博网站快照优化公司html5开发网站
  • 厦门门户网站制作服务商保健品商城网站模板
  • day61-devops
  • 【代码随想录算法训练营——Day54】并查集——107.寻找存在的路线
  • 用「费曼-神经耦合学习法」21天攻克算法
  • VScode C/C++环境配置
  • 禁用vscode的任务结束提示
  • 做网站接单的网站公司做网站哪个好
  • 轻量实用的 XML 与 JSON / 对象互转工具类(Jackson 实现)
  • Go Web 编程快速入门 19 - 附录C:事务与 CRUD(含最佳实践)
  • SQL Server从Enterprise CAL到Core版升级全记录:解锁160核心性能的完整复盘与深刻反思
  • 网站建设和管理培训自建服务器做网站要备案
  • ArkTS 第一课:从零开始学鸿蒙应用开发
  • 做门户网站代码质量方面具体需要注意什么厦门网页制作设计营销
  • LightGBM(Light Gradient Boosting Machine)模型详解