zoukankan      html  css  js  c++  java
  • Web前端笔试 编程题整理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;
    };
    
  • 相关阅读:
    QEMU裸机开发之S模式中断设置
    ARM64 的 memcpy 优化与实现
    RISCV from scratch 4: Creating a function prologue for our UART driver (2 / 3)
    RISCV MCU堆栈机制
    riscv 中断处理
    Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security问题解决
    每日学习
    每日学习
    每日学习
    每日学习
  • 原文地址:https://www.cnblogs.com/xiaoxu-xmy/p/13661594.html
Copyright © 2011-2022 走看看