You may assume that the array is non-empty and the majority element always exist in the array.
从数组中找到出现次数多于一般的元素。题目中有两个限定条件,一个是非空,另一个是肯定有一个元素出现次数多余一半。这种情况下我们可以用Moore voting algorithm。每找出两个不同的元素,成对的删除,最终剩下的一定就是出现次数最多的。时间复杂度为O(n)。代码如下:
public class Solution { public int majorityElement(int[] nums) { int count = 0; int current = 0; for(int i : nums) { if(count == 0) { current = i; count ++; } else if(current == i) { count ++; } else { count --; } } return current; } }