zoukankan      html  css  js  c++  java
  • LeetCode笔记整理1 摩尔投票法

    摩尔投票法

    主要用途

    求众数
    时间复杂度O(N), 空间复杂度O(1)

    算法思想

    每次从序列里选择两个不相同的数字删除掉(或称为“抵消”),最后剩下一个数字或几个相同的数字,就是出现次数大于总数一半的那个。

    有趣的

    核心就是对拼消耗。玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。那就大混战呗,最差所有人都联合起来对付你(对应你每次选择作为计数器的数都是众数),或者其他国家也会相互攻击(会选择其他数作为计数器的数),但是只要你们不要内斗,最后肯定你赢。最后能剩下的必定是自己人

    实现

    2个变量:
    e: 众数候选人
    count: 计数器, count <= 0, e即将失去候选资格

    主体:
    遍历整个数组,

    • 如果 count = 0, 更换候选人,
    • 如果e和当前数字相同count++
    • 以上都不成立 count--

    最后

    • 如果 count > 0, e即为众数,
    • 否则没有众数 返回-1

    代码

    var majorityElement = function(nums) {
        var e = -1;
        var count = 0;
        for(var n of nums){
            if(count === 0){
                e = n;
                ++count
            } else if(n === e){
                ++count
            } else {
                --count
            }
        }
        if(count > 0)
            return e;
        else
            return -1;
    };
    
  • 相关阅读:
    【代码笔记】JTable 、TableModel的使用3
    学习JSP(二)
    Tomcat文件配置
    学习JSP(一)
    配置elipse
    配置Jdk
    定义新运算练习题
    学习JAVA所需的东西
    学习秘籍
    总有那么一个人
  • 原文地址:https://www.cnblogs.com/xiaoxu-xmy/p/13669867.html
Copyright © 2011-2022 走看看