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

Posted airycode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[题目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;
    }


}

  

 

以上是关于[题目2]不修改数组找出重复的数字的主要内容,如果未能解决你的问题,请参考以下文章

不修改数组找出重复的数字(c语言)

1-找出数组中重复的数字

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

《剑指Offer——不修改数组找出重复的数字》代码

一起来刷《剑指Offer》——不修改数组找出重复的数字(思路及Python实现)

不修改数组找出重复的数字