zoukankan      html  css  js  c++  java
  • Majority Element II

    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;
    }
  • 相关阅读:
    虚拟主机支持apk
    pc显示,手机隐藏
    manjaro个人配置
    docker-compose部署elk
    docker-compose部署zk和kafka
    docker-compose部署redis-cluster
    ActiveMQ与RocketMQ对比
    dropbox离线安装包--需FQ
    C++实现中缀表达式转前、后缀
    运算符优先级
  • 原文地址:https://www.cnblogs.com/agentgamer/p/7019837.html
Copyright © 2011-2022 走看看