码迷,mamicode.com
首页 > 其他好文 > 详细

Majority Element II

时间:2017-06-15 21:40:03      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:结果   nbsp   ret   etc   []   func   style   amp   函数   

https://leetcode.com/problems/majority-element-ii/#/description

挑出所有大于n/3 的数,两个很相似的题,但是这次的major 是> n/3 而且是要挑出‘所有’

hash 表和排序依然可以,但是题目要求O(n) 就没办法了。

majority vote 的修改版:这个算法是一次投两个数而不是一个,这样我们可以投出两个major,而因为是n/3,所以最多只有两个major。

故函数返回要么是空,要么有1 个元素,要么有2 个。用majority vote 算法vote 出两个major 但是却不能保证他们大于n/3,所以要再遍历一次,确保>n/3 以后再添加到返回结果里。

var majorityElement = function(nums) {
    var t1, t2, n1 = 0, n2 = 0;
    var len = nums.length;
    for (var i = 0; i < len; i++) {

        if (t1 === nums[i]) {
            n1++;
            continue;
        }

        if (t2 === nums[i]) {
            n2++;
            continue;
        }

        if (n1 === 0) {
            t1 = nums[i];
            n1 = 1;
            continue;
        }

        if (n2 === 0) {
            t2 = nums[i];
            n2 = 1;
            continue;
        }

        n1--;
        n2--;
    }

    var z1 = 0, z2 = 0;
    for (var i = 0; i < len; i++) {
        if (n1 > 0 && nums[i] === t1) {
            z1++;
            continue;
        }

        if (n2 > 0 && nums[i] === t2) {
            z2++;
            continue;
        }
    }

    var ret = [];
    if (z1 > len / 3) ret.push(t1);
    if (z2 > len / 3) ret.push(t2);

    return ret;
}

 

Majority Element II

标签:结果   nbsp   ret   etc   []   func   style   amp   函数   

原文地址:http://www.cnblogs.com/agentgamer/p/7019837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!