> For the complete documentation index, see [llms.txt](https://nataliekung.gitbook.io/ladder_code/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nataliekung.gitbook.io/ladder_code/high-frequency/majority-number-ii.md).

# Majority Number II

题目：

Given an array of integers, the majority number is the number that occurs more than 1/3 of the size of the array.

分析：

3个数不一样就扔掉, 出现一个不一样的数，用新数抵消掉前俩数,注意最后还需要一个loop 比较2个candidates.

解法：

```
    public int majorityNumber(ArrayList<Integer> nums) {

        // write your code
        int count1 = 0, count2 = 0, c1 = -1, c2 = -1;
        for(int i = 0; i < nums.size(); i++){
            if(nums.get(i) == c1){
                count1++;
            }else if(nums.get(i) == c2){
                count2++;
            }else if(count1 == 0){
                c1 = nums.get(i);
                count1 = 1;
            }else if(count2 == 0){
                c2 = nums.get(i);
                count2 = 1;
            }else {
                count1--;
                count2--;
            }
        }
        //可能c1已经用来抵消掉前面很多数，所以count1<count2 所以要重新loop比较一次。
        count1 = count2 = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (nums.get(i) == c1) {
                count1++;
            } else if (nums.get(i) == c2) {
                count2++;
            }
        }    
        return count1 > count2 ? c1 : c2;
    }
```
