Lintcode :47. Majority Element II
阿新 • • 發佈:2018-11-04
描述
給定一個整型陣列,找到主元素,它在陣列中的出現次數嚴格大於陣列元素個數的三分之一。
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: 抵消的思想