今天在做算法题的时候学习到了一种新的解题方法--摩尔投票法
原题是leetcode上的多数元素问题;
"给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数 大于 ⌊ 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 }