剑指offer 2.2 不修改查找重复的数字
代码如下:
public class Solution {
public static void main(String[] args){
int array[]={2,3,5,4,3,2,6,7};
int len=8;
duplicate(array,len);
}
public static int countRange(int []array, int len, int start, int end){
if(array==null){
return 0;
}
int count=0;
for(int i=0;i<len;i++){
if(array[i]>=start&&array[i]<=end){
count++;
}
}
return count;
}
public static int duplicate(int numbers[],int length) {
if(numbers==null||length<=0){
return -1;
}
int start=1;
int end=length-1;
while(end>=start){
int middle=(end+start)/2;
int count=countRange(numbers,length,start,middle);
if(count>(middle-start+1)){
end=middle;
}
else{
start=middle+1;
}
if(start==end){
if(count>1) {//如果该数字个数超过1则为重复数字
System.out.println(start);
return start;
}
else
return -1;
}
}
//System.out.print(start);
return -1;
}
}
网易游戏公司福利 637人发布