JavaScript中數組的key-value在對象中倒裝的妙用


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM