287. 寻找重复数
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。
假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。
你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-the-duplicate-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public int findDuplicate(int[] nums) {
int n = nums.length;
int l = 1, r = n - 1, ans = -1;
while (l <= r) {
int mid = (l + r) >> 1;
int cnt = 0;
for (int i = 0; i < n; ++i) {
if (nums[i] <= mid) {
cnt++;
}
}
if (cnt <= mid) {
l = mid + 1;
} else {
r = mid - 1;
ans = mid;
}
}
return ans;
}
}
···
实际上,我的代码
```java
class Solution {
public static void main(String[] args) {
int [] nums =new int[]{1,3,4,2,2};
System.out.println(findDuplicate(nums));
}
public static int findDuplicate(int[] nums) {
int l=1,r=nums.length-1;
while(l<=r){
int mid=(r+l)/2;
int cnt=0;
for(int i=0;i<nums.length;i++){
if(nums[i]<=mid){
cnt++;
}
}
if(cnt<=mid) l=mid+1;
else {
r=mid-1;
}
}
return r;
}
}