当前位置:首页 > 未命名 > 正文内容

【解题报告】lintcode46主元素

u3blog8年前 (2016-05-16)未命名251

题意

给出一组数字,其中某个数字占据了总数的1/2以上,就是主元素,找出它 o(n)复杂度

思路

使用贪心的思路,每次从数组中拿一个数字,就认为它是主元素,然后继续拿,如果不同,就把计数器减一,如果相同,就把计数器加一,当计数器到0,就把下一个数字又作为主元素,继续这个过程,到最后,拿在手上的就是主元素了。

例子

比如数组[1,2,2,2,1,1,1] 开始时,设置主元素为1,计数器为1 2 与 1 不同,计数器减一,为0 由于计数为0, 取下一个数为主元素,2 继续,下个仍然是2,计数器加一 下个数是1, 计数减一, 设1为主元素 剩下两个1 最后我们的主元素就是手上的1

代码

public class Solution {
    /**
     * @param nums: a list of integers
     * @return: find a  majority number
     */
       public int majorityNumber(ArrayList<Integer> nums) {
        // write your code
        int count = 1,major = nums.get(0);
        for (int i =1;i<nums.size();i++){
            if (count == 0){
                major = nums.get(i);
                count = 0;
            }
            else if (nums.get(i) !=  major){
                count--;
            }else if (nums.get(i) == major){
                count++;
            }

        }
        return major;
    }
}

扫描二维码推送至手机访问。

版权声明:本文由u3blog发布,如需转载请注明出处。

本文链接:https://u3blog.xyz/?id=400

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。