1 题目描述

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.

2 分析

求主元素有两种O(n)量级的算法,一种是堆栈法,若栈为空或当前元素与栈顶元素相同,进栈,否则出栈。最后栈顶元素变为主元素。

另一种做法是芯片法,使用分治策略,比堆栈法要麻烦,主要是每次比较两个数字,不同,两个都扔掉,相同,留下一个,最后剩下的肯定是主元素。

3 代码

堆栈代码。

    public int majorityElement(int[] num)
    {
        int majorrityElement = 0;
        Stack<Integer> stack = new Stack<Integer>();
        for (int i = 0; i < num.length; i++) {
            if (stack.isEmpty()) {
                stack.push(num[i]);
            }else{
                if (stack.peek() == num[i]) {
                    stack.push(num[i]);
                }else {
                    stack.pop();
                }
            }
        }
        majorrityElement = stack.peek();
        return majorrityElement;
    }

芯片法有点麻烦,也没写。