反二分法,用二分法减小范围。
int findDuplicate(vector<int>& nums) {
int l = 1,r = nums.size() - 1;
while(l < r){
int m = (l+r)/2;
int cnt = 0;
for(int i:nums)
if(i <= m)
cnt++;
if(cnt > m)
r = m;
else
l = m + 1;
}
return l;
}