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;
    };
    
  • 相关阅读:
    Emacs使用gnus收发邮件时nnfolder相关介绍
    emacs 播放mp3
    你真的会写二分查找吗?
    数独的经典case
    MySQL处理千万级数据查询、分页
    Mysql Replication 机制
    redis位图(bitmap)常用命令的解析
    由浅入深了解线程池之源码初探
    BlockingQueue家族成员一览
    由浅入深了解线程池之初识线程池
  • 原文地址:https://www.cnblogs.com/xiaoxu-xmy/p/13669867.html
Copyright © 2011-2022 走看看