【JS】 存在重複元素 II #陣列 #雜湊表 Easy
阿新 • • 發佈:2018-11-30
給定一個整數陣列和一個整數 k,判斷陣列中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],並且 i 和 j 的差的絕對值最大為 k。
輸入: nums = [1,2,3,1], k = 3 , 輸出: true
輸入: nums = [1,0,1,1], k = 1 , 輸出: true
輸入: nums = [1,2,3,1,2,3], k = 2 , 輸出: false
解法一:
使用2個 for 迴圈超時了,因為時間複雜度是 O(n^2) ,特別是陣列 nums 非常大 而 k 等於 nums.length-2時,執行時間會非常長。
最終使用1個 for 迴圈加 IndexOf() 查詢,總算通過了。不過看效率好像也不高啊
var containsNearbyDuplicate = function(nums, k) { for( var i=0;i<nums.length;i++) { var pos = nums.indexOf(nums[i],i+1) if(pos==-1){ continue; }else if(pos<=i+k){ return true; } } return false; };
執行用時:2292 ms
已經戰勝 20.91 % 的 javascript 提交記錄
解法二:
使用雜湊表,var hash={key1:8 , key2: 10}
雜湊表的 key = i , val=陣列索引,當前索引 i 減去雜湊表的索引 val 小於等於 k,返回 true
意想不到竟然速度比前面快落麼多。
var containsNearbyDuplicate = function(nums, k) { var hash={} for( var i=0;i<nums.length;i++) { if(hash[nums[i]]==undefined){ hash[nums[i]]=i }else if(i-hash[nums[i]]>k){ hash[nums[i]]=i }else{ return true; } // console.log(hash) } return false; };
執行用時:100 ms
已經戰勝 82.51 % 的 javascript 提交記錄