给定一个大小为 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 |
#include<iostream>//输入输出,cout和cin
#include<vector>//动态数组
using namespace std;
int first(vector<int> & nums){//定义了一个函数first,以整数向量的引用作为参数
int ans=nums[0],count=0;//定义了一个空数组ans存储多数元素,一个count用于跟踪ans出现的次数
for(int i=0;i<nums.size();i++){//对输入向量nums进行迭代
if(count==0) ans=nums[i];//判断count,count=0,表示ans数组中没有重复出现的元素,随机赋值给一个
if(nums[i] == ans) count++;//判断count,如果当前向量元素等于ans,那么count递增,表示找到了另一个ans,如果不相等,count递减
else count--;
}
return ans;
}
int main(){
int n;
cin>>n;//获取n 数组的长度
vector<int> nums(n);//定义一个nums数组
for(int i=0;i<n;i++){
cin>>nums[i];
}//输入数组元素,一个循环
int result=first(nums);
cout<<result<<endl;
return 0;
}
注意一些基本的语法错误,对数组的定义vector<int>& nums(n),同时需要施加循环for(int i=0;i<n;i++){cin>>nums[i]}。