题目描述:
设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;
}