[题目2]不修改数组找出重复的数字




代码实现:
package j2;
/**
* 不修改数组找出重复的数字
* Created by admin on 2019/5/14.
*/
public class FindDuplicate3 {
public static void main(String[] args) {
int arr[] = {2,3,5,4,3,2,6,7};
System.out.println(duplicate(arr,arr.length));
}
public static int duplicate(int[] arr,int len){
if (arr == null || arr.length<= 0) {
return -1;
}
int start=1;
int end = len-1;
while (start <= end) {
int mid = ((end-start)>>1)+start;
//统计每区间里数字的数目
int count = countRange(arr,len,start,mid);
if (end == start) {
if (count>1) {
return start;
} else {
break;
}
}
if (count > (mid-start+1)) {
end = mid;
} else {
start = mid+1;
}
}
return -1;
}
/**
* 统计区间中数字的数目
* @param arr
* @param len
* @param start
* @param end
* @return
*/
private static int countRange(int[] arr, int len, int start, int end) {
int result = 0;
if (arr == null || arr.length<=0) {
return 0;
}
for (int i=0;i<len;i++) {
if (arr[i]>=start&& arr[i] <= end) {
result++;
}
}
return result;
}
}
浙公网安备 33010602011771号