CodingInterview-01陣列中重複的數字
阿新 • • 發佈:2021-01-27
技術標籤:劍指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; }