[劍指offer] JAVA版題解 面試題3

題目
在這裏插入圖片描述
解題思路:
在這裏插入圖片描述
在這裏插入圖片描述
實現:時間複雜度O(n),空間複雜度:O(1)

public Integer findDuplicateInArray(int[] array){
        // 對參數進行判斷
        if (array == null || array.length == 0){
            return null;
        }

        for(int i = 0;i < array.length;i ++){
            if (array[i] < 0 || array[i] > array.length - 1){
                return null;
            }
        }

        for(int i = 0;i < array.length;i ++){
            while (array[i] != i){
                int num = array[i];
                if(array[num] == num){
                    return num;
                }
                array[i] = array[num];
                array[num] = num;
            }
        }
        return null;
    }

變形題目:
在這裏插入圖片描述
解法一:(輔助數組法)
在這裏插入圖片描述
代碼實現:

  public Integer findDuplicateInArray(int[] array){
        // 數組爲空或者數組沒有元素
        if (array == null || array.length == 0){
            return null;
        }

        // 數組長度
        int arrLen = array.length;

        // 數組有元素但是元素的值不符合要求,數組的值要求在(1~n)
        for (int i = 0;i < arrLen;i ++){
            if (array[i] <= 0 || array[i] >= arrLen){
                return null;
            }
        }

        // 用輔助數組
        int[] helpArr = new int[arrLen];

        // 遍歷原數組的每一個元素,將該元素的值作爲輔助數組的下標,查看以該下標的輔助數組的值是否爲0,不爲0說明重複,否則將值寫入輔助數組。
        for (int i = 0;i < arrLen;i ++){
            int arrValue = array[i];
            if (helpArr[arrValue] != 0){
                return arrValue;
            }
            helpArr[arrValue] = arrValue;
        }

        return null;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章