LeetCode(169):多数元素

题目描述

image.png

实现思路

根据题目的描述,可以理解为:
在给定的数组中 找出 出现次数最多的一个元素(假定一定有一个这样的元素)
那么我们可以借助一个哈希表 来存储各个元素出现的次数
遍历完数组后,再找出哈希表中的value最大值

代码实现(Javascript)

首先遍历数组:
1、用map.get(key)方法拿到当前元素出现的次数
2、用map.set(key,value)方法 让其次数+1

然后用 array.from(map) 方法将哈希表转换成数组
(数组中的每个元素都是一个对象)
并根据value值从大到小排序
返回最大的value值所对应的key值

var majorityElement = function(nums) {
    var myMap=new Map()
    for(let i=0;i<nums.length;i++){
        let v=myMap.get(nums[i])
        if(v!==undefined){
            v++
            myMap.set(nums[i],v)
        }else{
            myMap.set(nums[i],1)
        }
    }

    var arr=Array.from(myMap)
    arr.sort(function(a,b){
        return b[1]-a[1]
    })

    return arr[0][0]
};

注意到题目说:多数元素是指在数组中出现次数大于 n/2 的元素(且唯一)
因此,我们可以在循环中,对v再做一层判断
若v > n/2,则当前元素一定是我们要找的那个元素

/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function(nums) {
    var myMap=new Map()
    for(let i=0;i<nums.length;i++){
        let v=myMap.get(nums[i])
        if(v!==undefined){
            v++
            if(v>Math.floor(nums.length/2)){
                return nums[i]
            }
            myMap.set(nums[i],v)
        }else{
            myMap.set(nums[i],1)
        }
    }

    var arr=Array.from(myMap)
    arr.sort(function(a,b){
        return b[1]-a[1]
    })

    return arr[0][0]
};
原文地址:https://www.cnblogs.com/baebae996/p/13914184.html