当前位置:网站首页>【LeetCode】287. 寻找重复数
【LeetCode】287. 寻找重复数
2022-08-09 04:55:00 【酥酥~】
题目
给定一个包含 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
提示:
1 <= n <= 105
nums.length == n + 1
1 <= nums[i] <= n
nums 中 只有一个整数 出现 两次或多次 ,其余整数均只出现 一次
进阶:
如何证明 nums 中至少存在一个重复的数字?
你可以设计一个线性级时间复杂度 O(n) 的解决方案吗?
题解
排序+暴力
class Solution {
public:
int findDuplicate(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()-1;i++)
{
if(nums[i] == nums[i+1])
return nums[i];
}
return 0;
}
};
二分法
因为序列有n+1个值,每个值都在1~n之间
且只有一个重复值
那么只需要寻找目标值target
这就可以使用二分法,left=1,right=n
当mid小于target时,数列中小于等于mid的值不会有重复的,所以cnt小于或者等于mid
当mid大于等于target时,数列中小于等于mid的值会有重复的,所以cnt必定大于mid
class Solution {
public:
int findDuplicate(vector<int>& nums) {
int len = nums.size();
int left = 1;
int right = len;
int res = 0;
while(left<=right)
{
int mid = left + ((right - left)>>1);
int cnt = 0;
for(int i:nums)
{
if(i<=mid)
cnt++;
}
//cout<<left<<"=="<<mid<<"=="<<right<<"==>"<<cnt<<endl;
if(cnt <= mid)
left = mid+1;
else
{
right = mid-1;
res = mid;
}
}
return res;
}
};
边栏推荐
猜你喜欢
[21天学习挑战赛——内核笔记](四)——内核常见调试手段(printf、dump_stack、devmem)
力扣242-有效的字母异位词——哈希表法
Pycharm社区版专业版下载安装环境配置【精细到每一个步骤】
MySQL: Implementation Principles of Submitted Read and Repeatable Read | MVCC (Multi-Version Concurrency Control) - Notes for Your Own Use
亚马逊面对风控,自养号测评时应该怎么做?
Harmony OS ets ArkUI 】 【 】 the development basic page layout and data connection
Quantitative Genetics Heritability Calculation 1: Parent-Child Regression Method
供应商对接Chewy的EDI需求
Why do enterprises need business intelligence BI in the digital age
Still don't know what business intelligence (BI) is?After reading this article, you will understand
随机推荐
LeetCode-636. 函数的独占时间
HP路由器和交换机日志分析
算法---优美的排列(Kotlin)
【暑期每日一题】洛谷 P5724 【深基4.习5】求极差 / 最大跨度值
杰理之播歌曲前后音量大小不一样【篇】
【暑期每日一题】洛谷 P1176 路径计数2
[MLT] Analysis of MLT Multimedia Framework Production and Consumption Architecture (2)
ddr系统检验
C进阶-C语言文件操作
GraalVM安装
2022-08-08 mysql慢SQL-Q18-10GB数据量-mysql/innodb测试
I.MX6U-ALPHA开发板(串口实验)
Faced with risk control, what should Amazon do when evaluating self-supporting accounts?
【Harmony OS】【ARK UI】轻量级数据存储
MySQL---performance schema
Zuul---路由功能
什么是通用微处理器、单片机、DSP芯片、嵌入式系统?
Masked AutoEncoder论文及实现
【暑期每日一题】洛谷 P5729 【深基5.例7】工艺品制作
杰理之播放最大音量提示音播不出来【篇】