C++之神奇的元素小程序

题目描述:
设A是含有n个元素的数组,找出在A中出现的次数严格大于n/2的元素
输入格式:
第一行一个n,表示有n个元素,n<=1000000
第二行n个整数x(0<x<1000000000)
输出格式:
输出一个数,为找出的答案,保证A中存在答案
输入样例:
7
1 1 1 1 2 3 4
输出样例:
1

法一:有一个经典的摩尔投票法,遍历一遍数组即可。你可以去百度一下,这方法一看就会。法二:还可以搞一个频率数组,算出每个数出现的次数,然后找到最大的。

#include <iostream>
#include <vector>

int main()
{
    int n;
    std::cin >> n;
    std::vector<int> nums(n);
    for (int i = 0; i < n; i++)
        std::cin >> nums[i];
    int m = 0;
    int i = 0;
    for (auto x : nums)
    {
        if (i == 0)
        {
            m = x;
            i++;
        }
        else if (m == x)
        {
            i++;
        }
        else
        {
            i--;
        }
    }
    std::cout << m << std::endl;
    return 0;
}