算法记录
LeetCode 题目:
        给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 <hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
说明
一、题目
输入: nums = [3,2,3]输出: [3]
二、分析
            题目很简单,我们可以直接使用 hash 来进行计数,最后遍历输出即可,但是这样需要存储的数据太多,不够简洁。        
我们这里使用摩尔投票来进行计算,对于 [摩尔投票]() 不懂的可以看一下我的这篇文章。
class Solution {    public List<Integer> majorityElement(int[] nums) {        int[][] count = new int[2][2];        for(int num : nums) {            if(count[0][0] > 0 && num == count[0][1]) count[0][0]++;            else if(count[1][0] > 0 && num == count[1][1]) count[1][0]++;            else if(count[0][0] == 0) {                count[0][0]++;                count[0][1] = num;            } else if(count[1][0] == 0) {                count[1][0]++;                count[1][1] = num;            } else {                count[0][0]--;                count[1][0]--;            }        }        count[0][0] = 0;        count[1][0] = 0;        for(int num : nums) {            if(count[0][1] == num) count[0][0]++;            else if(count[1][1] == num) count[1][0]++;        }        List<Integer> ret = new ArrayList();        for(int i = 0; i < 2; i++) {            if(count[i][0] > nums.length / 3) ret.add(count[i][1]);        }        return ret;    }}<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
总结
摩尔投票的应用。
原文:https://juejin.cn/post/7100527398856163359