摩尔投票算法是一种在线性时间O(n)和空间复杂度O(1)的情况下,在一个元素序列中查找包含最多的元素的典型的流算法。
下面用此算法来解LeetCode的169. 求众数、229. 求众数 II。
一、求众数:
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
1.普通方法(二重循环):(此方法在数据量大时,必然消耗时间很大)
class Solution {
public int majorityElement(int[] nums) {
int n = nums.length/2;
for(int i=0; i<nums.length; i++){
int count = 0;
for(int j=0; j<nums.length; j++){
if(nums[j] == nums[i]){
count++;
}
}
if(count > n){
return nums[i];
}else{