287 Find the Duplicate Number 寻找重复数
Posted lina2014
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了287 Find the Duplicate Number 寻找重复数相关的知识,希望对你有一定的参考价值。
一个长度为 n + 1 的整形数组,其中的数字都在 1 到 n 之间,包括 1 和 n ,可知至少有一个重复的数字存在。假设只有一个数字重复,找出这个重复的数字。
注意:
不能更改数组内容(假设数组是只读的)。
只能使用恒定的额外空间,即要求空间复杂度是 O(1) 。
时间复杂度小于 O(n2)
数组中只有一个数字重复,但它可能不止一次重复出现。
详见:https://leetcode.com/problems/find-the-duplicate-number/description/
方法一:
class Solution { public: int findDuplicate(vector<int>& nums) { int left=1,right=nums.size()-1; while(left<right) { int mid=left+(right-left)/2; int cnt=0; for(int val:nums) { if(val<=mid) { ++cnt; } } if(cnt<=mid) { left=mid+1; } else { right=mid; } } return left; } };
方法二:
class Solution { public: int findDuplicate(vector<int>& nums) { int s=0,f=0,t=0; while(true) { s=nums[s]; f=nums[nums[f]]; if(s==f) { break; } } while(true) { s=nums[s]; t=nums[t]; if(s==t) { break; } } return s; } };
参考:https://www.cnblogs.com/grandyang/p/4843654.html
以上是关于287 Find the Duplicate Number 寻找重复数的主要内容,如果未能解决你的问题,请参考以下文章
287. Find the Duplicate Number *HARD*
LeetCode 287. Find the Duplicate Number
287. Find the Duplicate Number
287. Find the Duplicate Number