zoukankan      html  css  js  c++  java
  • 摩尔投票法

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

    一、排序、遍历

    二、摩尔投票法

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

    最简单的形式就是,查找输入中重复出现超过一半以上(必须大于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;
    }
  • 相关阅读:
    背包问题--动态规划
    day03_13 多分支if语句及作业
    day03_12 缩进介绍
    day03_11 if语句实现猜年龄01
    day03_10 注释及简单的用户输入输出
    day03_09 编码部分历史及文件编码简介
    day03_07 变量的重新赋值01
    day03_06 变量详解
    day03_05 Python程序文件执行和与其他编程语言对比
    day03_04 文件后缀及系统环境变量
  • 原文地址:https://www.cnblogs.com/-citywall123/p/13336802.html
Copyright © 2011-2022 走看看