對於數組的去重、尋找指定元素的索引,通常我們都是通過遍歷來解決,但是在某些應用場景下,將數組的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
};