题目描述
实现思路
根据题目的描述,可以理解为:
在给定的数组中 找出 出现次数最多的一个元素(假定一定有一个这样的元素)
那么我们可以借助一个哈希表 来存储各个元素出现的次数
遍历完数组后,再找出哈希表中的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]
};