题目描述:
给定一个大小为 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 = 1for (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 = 0var count = 0for (var i = 0; i < nums.length; i++ ) {if (count === 0) {help = nums[i]}if (help !== nums[i]) {count--} else {count++}}return help};
思考:
暴力法效率极低,利用双循环的方法,而投票法单次循环就可完成,值得借鉴。
总结:
学到了投票法。
