剑指offer-面试题2-不修改数组找出重复的数字

package offer;

public class Duplication {

                
                private int countRange(int[] arr,int l,int r) {
                        
                        int count=0;
                        for(int i =0;i<arr.length;i++) {
                                if(arr[i]>=l&&arr[i]<=r) {
                                        ++count;
                                }
                        }
                        return count;
                }
                
                public int getDuplication(int[] arr) {
                        
                        int start = 1;
                        int end  = arr.length-1;
                        
                        while(end>=start) {
                                
                                int middle = (end-start)/2 + start;
                                int count = countRange(arr,start,middle);
                                
                                if(end==start) {
                                        if(count>1)
                                                return start;
                                        else {
                                                break;
                                        }
                                }
                                
                                if(count>middle-start+1) {
                                        end = middle;
                                }else {
                                        start=middle+1;
                                }
                        }
                        
                        return -1;
                        
                }
                

}

猜你喜欢

转载自blog.csdn.net/weixin_41993767/article/details/84192936