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