1. 程式人生 > >Lintcode :47. Majority Element II

Lintcode :47. Majority Element II

描述

給定一個整型陣列,找到主元素,它在陣列中的出現次數嚴格大於陣列元素個數的三分之一。

dalao思路是,如果出現3個不一樣的數,就抵消掉。記錄兩個candidate和每個candidate分別的出現次數。如果遍歷到的數和兩個candidate都不等,就count都減1。最後可能會剩下兩個candidate,再遍歷一次整個陣列驗證一下誰是主元素。
 

 

 public int majorityNumber(List<Integer> nums) {
        // write your code here
       
        int candidate1 = 0, candidate2 = 0, count1 = 0, count2 = 0;
        for (int num : nums) {
            if (num == candidate1) {
                ++count1;
            } else if (num == candidate2) {
                ++count2;
            } else if (count1 == 0) {
                candidate1 = num;
                count1 = 1;
            } else if (count2 == 0) {
                candidate2 = num;
                count2 = 1;
            } else {
                --count1;
                --count2;
            }
        }

        count1 = 0;
        count2 = 0;
        for (int num : nums) {
            if (num == candidate1) {
                ++count1;
            } else if (num == candidate2) {
                ++count2;
            }
        }

        return count1 > count2 ? candidate1 : candidate2;
    }

summary:  抵消的思想