标签:
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.
Note:
O(n2)
.这里有个条件,就是数组中的数的范围是[1,n];
我们可以尝试用二分法,第一次取(1+n)/2,如果在整个数组中小于等于(1+n)/2的数的个数超过了(1+n)/2,那么重复的数一定是[1,(1+n)/2)区间的数。
class Solution { public: int findDuplicate(vector<int>& nums) { int numsSize = nums.size(); int low = 0,high = numsSize; while(low<high){ int mid = low+(high-low)/2; int cnt = 0; for(int i=0;i<numsSize;i++){ if(nums[i] <= mid){ cnt++; } } if(cnt > mid){ high = mid; }else{ low = mid+1; } } return low; } };
标签:
原文地址:http://www.cnblogs.com/zengzy/p/5003724.html