数组中占比超过一半的元素称之为主要元素。 给定一个整数数组, 找到它的主要元素。 若没有, 返回 - 1。
示例 1:<br /> 输入:[1, 2, 5, 9, 5, 9, 5, 5, 5]<br /> 输出: 5示例 2:<br /> 输入:[3, 2]<br /> 输出: - 1示例 3:<br /> 输入:[2, 2, 1, 1, 1, 2, 2]<br /> 输出: 2
第一次写法(堆栈溢出,错误)
var majorityElement = function (nums) {
let arr = [],
num = 0,
max = 0;
nums.forEach(val => {
arr.push(nums.filter(val2 => val === val2))
})
for (let i = 0; i < arr.length; i++) {
if(arr[i].length>max){
max = arr[i].length
num = arr[i][0]
}
}
if(max>nums.length/2){
return num
}else{
return -1
}
};
看完题解后,发现可以使用es6新的Map数据结构储存
通过map可以储存
var majorityElement = function (nums) {
let map = new Map(),
max = -Infinity,
len = nums.length/2;
for (let i = 0; i < nums.length; i++) {
const curr = nums[i];
map.set(curr,map.has(curr)?map.get(curr) + 1 : 1)
max = Math.max(max,map.get(curr))
if(max>len){
return curr
}
}
return -1
};
