LintCode-46.主元素

题目

描述

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。

样例

给出数组[1,1,1,1,2,2,2],返回 1

解答

思路

看到这个题目,第一反应是排序后取中间数,这没什么好说的。
这个题目的挑战是时间复杂度为O(n),空间复杂度是O(1)。这个有点意思。
如果一个数组存在主元素,那么在数组中删除两个不同的数,对于主元素的地位是没有影响的。根据这个思路设计算法。

代码

public class Solution {
    /**
     * @param nums: a list of integers
     * @return: find a  majority number
     */
    public int majorityNumber(ArrayList nums) {
        // write your code
        /**
        * count: 统计当前认为的主元素的数量
        * seed: 当前认为的主元素
        * n: 数组长度
        **/
        int count = 0, seed = nums.get(0), n = nums.size();
        //从两头往中间循环
        for(int i = 1; i= n/2){
            return seed;
        }
        //提交了几次发现如果没超过一半需要返回最后的元素
        else{
            return nums.get(n-1);
        }
    }
}

你可能感兴趣的:(LintCode-46.主元素)