1. 程式人生 > 其它 >CodingInterview-01陣列中重複的數字

CodingInterview-01陣列中重複的數字

技術標籤:劍指Offer

public static int findRepeatNumber(int[] nums) {

    //由於HashMap的key不重複
    HashMap<Integer,Integer> map = new HashMap<>();
    for (int temp : nums) {
        if (map.containsKey(temp)) {//判斷map是否包含這個值 直接返回
            return temp;
        }
        map.put(temp, 0);//不存在 這存入map
    }
    return -1;
}

執行時間沒有擊敗100%

看了別人的答案好聰明啊

充分利用題目條件(我沒看到啊!細節)

長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內

//優化答案
public static int findRepeatNumber(int[] nums){
    for (int i = 0; i < nums.length; i++) {
        while(i != nums[i]) { //出口 下標與值相等
            if(nums[nums[i]] == nums[i]) { //下標位置已經存在正確的值了 說明重複了
                return nums[i];
            }
            swap(nums, i, nums[i]); //把當前值與相等下標的值互換
        }
    }
    return -1;
}