• 摩尔投票法


    在一个无序数组中,存在一个数,它出现的次数大于数组长度的一半。输出这个数

    一、排序、遍历

    二、摩尔投票法

    摩尔投票算法是一种使用线性时间和常数空间查找大部分元素序列的算法。

    最简单的形式就是,查找输入中重复出现超过一半以上(必须大于n/2,等于不算)的元素。如果序列中没有这种元素,算法不能检测到正确结果,将输出其中的一个元素之一。
    如果不能保证输入数据中有占有一半以上的元素,需要再遍历一下验证。

    满足两个先决条件

    1、出现超过一半以上(n/2)的元素有且只有一个;

    2、这个元素一定存在

    算法步骤

    我们维护一个局部变量作为当前查找元素,一个局部变量作为计数器,

    当遍历开始的时候,此时计数(count)为0,则将数组第一个元素作为当前查找元素;

    当遍历的元素与查找元素相等,计数加1;反之则-1;

    若当计数为0时,将下一个元素作为当前查找元素,继续重复以上操作;当遍历结束时,当前查找元素则为目标元素。

     
    #include<iostream>
    using namespace std;
    int main() {
        
        int nums[100];
        int count = 1;
        int e = nums[0];
        int n, x;
        cin >> n;
        for (int i = 0; i < n; i++) {
            cin >> nums[i];
        }
        for (int i = 1; i < n; i++) {
            if (e == nums[i])
                count++;
            else if (count != 0) {
                count--;
            }
            else if (count == 0)
                e = nums[i];
        }
        cout << e << endl;
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    fetch与xhr的对比
    使用 fetch
    数组的剩余方法
    slice方法与splice方法
    php命名空间使用
    PHP面向对象编程学习之对象基础
    ubuntu下lamp环境配置及将window代码迁移至linux系统
    ThinkPHP中使用ajax接收json数据的方法
    给js文件传递参数
    JavaScript和php常用语法——切割字符串
  • 原文地址:https://www.cnblogs.com/-citywall123/p/13336802.html
Copyright © 2020-2023  润新知