Majority Element

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

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;
    }
}

你可能感兴趣的:(算法,Moore)