Problem P02. [算法课分治] 寻找多数
给定一个大小为 n 的整型数组 a,找到其中的多数元素,多数元素是指在数组中出现次数大于 ⌊n/2⌋ 的元素。
输入
第一行输入一个整数n (1≤n≤104) 代表数组的长度。
第二行输入一行数字代表数组a (1≤ai≤104),数字与数字之间用空格间开。
保证给定的数组总是存在多数元素。
输出
输出一个整数代表数组的多数元素。
样例
标准输入复制文本 |
3 1 1 1 |
标准输出复制文本 |
1 |
标准输入复制文本 |
7 4 1 2 3 3 3 3 |
标准输出复制文本 |
3 |
标准输入复制文本 |
9 4 2 2 2 2 21 23 23 2 |
标准输出复制文本 |
2 |
提示
如果数 a 是数组 n 的众数,如果我们将 n 分成两部分,那么 a 必定是至少一部分的众数。
#include<iostream>
#include<vector>
using namespace std;
int first(vector<int> & nums){
int ans=nums[0],count=0;
for(int i=0;i<nums.size();i++){
if(count==0) ans=nums[i];
if(nums[i] == ans) count++;
else count--;
}
return ans;
}
int main(){
int n;
cin>>n;
vector<int> nums(n);
for(int i=0;i<n;i++){
cin>>nums[i];
}
int result=first(nums);
cout<<result<<endl;
return 0;
}