description
给定一个大小为n的数组,找出数组中元素个数最多(大于n/2)的元素,假定这个元素一定存在且数组非空。
思路
用一个数组来装元素的个数,用元素本身作为下标
代码
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
const n = parseInt(nums.length / 2);
const eleCount = [];
let num;
nums.forEach(ele => {
if (eleCount[ele] === undefined) {
eleCount[ele] = 0;
}
eleCount[ele] += 1;
if (eleCount[ele] > n) {
num = ele;
}
})
return num;
};
// 改进
function(nums) {
const n = parseInt(nums.length / 2);
const eleCount = new Map();
let num;
nums.forEach(ele => {
if(!eleCount.has(ele)) {
eleCount.set(ele, 1);
} else {
eleCount.set(ele, eleCount.get(ele) + 1);
}
if (eleCount.get(ele) > n) {
num = ele;
}
})
return num;
}
我看了别人的,发现别人的思路和我的一样,只不过使用的数据结构是Map,略想了下,使用Map的性能比数组的好,因为我的做法会让数组的部分存储空间没有使用,造成浪费,而Map不会发生这种情况,而且Map是key唯一的。
看了看评论,说是摩尔投票算法???