难度:简单
语言:js
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
方法一:
思路:将数组升序排序,满足条件的元素一定在数组中间的位置。
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
// 对数组进行升序排序
nums.sort(function(a,b){
return a-b;
});
// 所求解一定是在数组中间的元素
return nums[Math.floor(nums.length/2)];
};
方法二:摩尔投票法
思路可以看这个视频,博主讲的很清楚了。(【算法】摩尔投票法_哔哩哔哩_bilibili)
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
var count = 0;
var res;
// 遍历数组
for(var i = 0; i < nums.length;i++) {
if(count === 0) {
res = nums[i];
count++;
}else {
res === nums[i]?count++:count--;
}
}
return res;
};