1. 程式人生 > >LintCode 46. Majority Element

LintCode 46. Majority Element

描述:

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

自己的做法太醜陋,只有dalao的做法

思路:反正主元素一定是數組裡面數量最多的那一個數,採取的策略是,每當遇到同一個數,計數器count++,當遇到不同的數,count--,當count = 0 時,更換另一個數。(但是我現在仍然如何從貪心的角度去解讀這個思路,望賜教)

 public int fastMethod(List<Integer> nums){
        if (nums == null) return Integer.MAX_VALUE;
        int count = 0;
        int ans = 0;
        
        for (int i : nums) {
            if (count == 0) {
                ans = i;
                count++;
            } else if (ans != i) {
                count--;
            } else if (ans == i) {
                count++;
            }
        }
        
        return ans;
    }

summary : 尋找數量最多的個體,有一種“正負抵消”的思想