思路:java
使用 cnt 來統計一個元素出現的次數,當遍歷到的元素和統計元素相等時,令 cnt++,不然令 cnt--。若是前面查找了 i 個元素,且 cnt == 0,說明前 i 個元素沒有 majority,或者有 majority,可是出現的次數少於 i / 2 ,由於若是多於 i / 2 的話 cnt 就必定不會爲 0 。此時剩下的 n - i 個元素中,majority 的數目依然多於 (n - i) / 2,所以繼續查找就能找出 majority。code
public int MoreThanHalfNum_Solution(int[] nums) { int majority = nums[0]; for (int i = 1, cnt = 1; i < nums.length; i++) { cnt = nums[i] == majority ? cnt + 1 : cnt - 1; if (cnt == 0) { majority = nums[i]; cnt = 1; } } int cnt = 0; for (int val : nums) if (val == majority) cnt++; return cnt > nums.length / 2 ? majority : 0; }