java_1_找出数组中重复元素


1.改变数组

 public static int getRepeat(int[] arr){
        for (int i = 0; i < arr.length; i++) {

            while (arr[i] != i){
                if (arr[i] == arr[arr[i]]){
                    return arr[i];
                }else {
                    int tmp = arr[i];
                    arr[i] = arr[tmp];
                    arr[tmp] = tmp;
                }
            }

        }
        return -1;
    }

2.不改变数组,使用辅助数组

 public static int getRepeat(int[] arr){
        int[] arrtmp = Arrays.copyOf(arr,arr.length );
        for (int i = 0; i < arrtmp.length; i++) {
            while (arrtmp[i] == i){
                if (arrtmp[i] == arrtmp[arrtmp[i]]){
                    return arrtmp[i];
                }else {
                    int tmp = arrtmp[i];
                    arrtmp[i] = arrtmp[tmp];
                    arrtmp[tmp] = tmp;
                }
            }
        }
        return -1;
    }

3.不改变数组,二分查找

 public static int getDuplication(int[] arr){
        int start = 1;
        int end = arr.length-1;
        while (end >= start){
            int mid = ((end - start)>>1) +start;
            int count = getCount(arr,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;
    }


    private static int getCount(int[] arr, int start, int end) {
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] <= end && arr[i]>= start ) count++;
        }
        return count;

    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM