摩尔投票解决多数元素问题

今天在做算法题的时候学习到了一种新的解题方法--摩尔投票法

原题是leetcode上的多数元素问题;

"给定一个大小为 的数组,找到其中的多数元素.多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素"

解题思路是这样的,暂时选定第一个元素为候选人,给一个初始票数为1,遍历数组每当遇到与候选人相同的数,票数则加一,如果不相同则减一.如果等于0则更换下一个候选人,初始票数为1

遍历完成之后剩下的那个候选人就是这个数组里面的多数元素,因为题目里面规定了多数元素在数组中出现的次数一定是大于n/2的,所有最后候选人的票数一定是大于等于1的(如果数组中存在多数元素);

 1 class Solution {
 2     public int majorityElement(int[] nums) {
 3         int count = 1;
 4         int candidate = nums[0];
 5         for (int i = 1; i < nums.length; i++){
 6             if (nums[i] == candidate) {
 7                 count++;
 8             } else if (--count == 0) {
 9                 candidate = nums[i];
10                 count = 1;
11             }
12         }
13         return candidate;
14     }
15 }
原文地址:https://www.cnblogs.com/lkylin/p/14241841.html