對於數組的去重、尋找指定元素的索引,通常我們都是通過遍歷來解決,但是在某些應用場景下,將數組的value-key進行倒裝,也即將value當做對象的key,key當做對象value,可以極大降低算法的時間復雜度,提高其性能,來看幾個例子。
例1
給定一個非空整數數組,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。 說明: 你的算法應該具有線性時間復雜度。 你可以不使用額外空間來實現嗎? 示例1: 輸入:[2,2,1] 輸出: 1 示例2: 輸入: [4,1,2,1,2] 輸出:4 來源:leetcode.com
var singleNumber = function(nums) { let obj = {}; for (let i = 0; i < nums.length; i++) { if (obj[nums[i]]) { delete obj[nums[i]]; } else { obj[nums[i]] = 1; } } return Object.keys(obj)[0]; };
例2
給定一個非空的整數型數組
[1,2,1,2,4,5,6,2,9,3,1,9,5,9,6]
找到其中重復次數最多的元素並返回它的索引。 來源:面試筆試題
var findMostRepeatElementIndex = function(arr) { let obj = {}; let max = 1; let result = []; for (let i = 0;i < arr.length; i++){ if(!obj[arr[i]]){ obj[arr[i]]={value:1}; obj[arr[i]].index=[].concat(i); } else { obj[arr[i]].value++; obj[arr[i]].index.push(i); if(obj[arr[i]].value>max){ max = arr[i]; result = obj[arr[i]].index; } } } return result };