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
};

 

posted @ 2019-09-20 15:30  keang  阅读(1833)  评论(0编辑  收藏  举报