AcWing 14. 不修改数组找出重复的数字
原题链接
简单
作者:
SH2OCN
,
2019-04-15 16:22:35
,
所有人可见
,
阅读 1363
Java代码
class Solution {
public int duplicateInArray(int[] nums) {
if(nums == null || nums.length < 2)
return -1;
int low = 1;
int high = nums.length - 1;
int mid = 0, res = 0;
while(low < high) {
mid = low + (high - low) / 2;
res = count(nums, low, mid); //统计[low,mid]之间的元素个数
if(res > mid - low + 1) { //说明[low,mid]之间有重复数字
high = mid;
}
else { //否则说明[mid+1,high]之间有重复数字
low = mid + 1;
}
}
return low;
}
//统计nums中,元素值在[low,high]范围内元素的个数
public int count(int[] nums, int low, int high) {
int ans = 0;
for (int i : nums) {
if(i >= low && i <= high)
ans ++;
}
return ans;
}
}