剑指 Offer 56 - II. 数组中数字出现的次数 II

103 阅读1分钟

剑指 Offer 56 - II. 数组中数字出现的次数 II

思路:用一个对象去记录遍历的值,访问obj下的nums[i] 如果是undefined则说明之前没有遍历到,于是就新增为1,如果得到的值时1,说明之前已经遍历到了一次,这是将值加个1就行,此时虽然我们知道,该值时不应该继续保存的,但是为了方便后续还有一个值时重复的,为了方便,就得加一,等到下一次匹配到同样的值,且值为2时候,这时候是第三次匹配了,直接删除重复的数即可,依次类推,遍历完成剩下的key值,就是满足条件的keys

var singleNumber = function(nums) {
    var obj = {}
    for(var i =0;i<nums.length;i++){
        if(obj[nums[i]] === undefined){
            obj[nums[i]] = 1
        }else if(obj[nums[i]] === 1){
            obj[nums[i]] ++
        } else{
            delete obj[nums[i]]
        }
    }
    return Object.keys(obj)
};