题目描述
blablabla
样例
blablabla
java 代码
class Solution {
//定义域:输入1∼n中的一个数x
//值域:计算出数组中小于等于x的数的个数y。如果y大于[x1,x2]区间长度,说明重复的数字是在[x1,x2]区间中
//最优解:找出[x1,x2]区间的最短区间。low_bound
public int duplicateInArray(int[] nums) {
int num = bsearch_1(1, nums.length - 1, nums);
return num;
}
int bsearch_1(int l, int r, int nums[]) {
while (l < r) {
int mid = l + r >> 1;//同l+( r-l )/2;
if (check(mid, l, nums)) r = mid;
else l = mid + 1;
}
return l;
}
private boolean check(int mid, int l, int[] nums) {
int count = 0;
for (int i = 0; i <nums.length; i++) {
if (nums[i] >= l && nums[i] <= mid)
count++;
}
if (count >(mid - l + 1))
return true;
return false;
}
}