题目描述:
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
算法实现:
暴力法
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
var mid = Math.ceil(nums.length / 2)
if (nums.length === 1) {return nums[0]}
for (var i = 0; i <= mid; i++ ) {
var count = 1
for (var j = i + 1; j < nums.length; j++ ) {
if (nums[j] === nums[i]) {
count++
}
if (count >= mid) {
return nums[i]
}
}
}
};
投票法
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
var help = 0
var count = 0
for (var i = 0; i < nums.length; i++ ) {
if (count === 0) {
help = nums[i]
}
if (help !== nums[i]) {
count--
} else {
count++
}
}
return help
};
思考:
暴力法效率极低,利用双循环的方法,而投票法单次循环就可完成,值得借鉴。
总结:
学到了投票法。