1 条题解
-
0
计数排序法
#include<bits/stdc++.h> using namespace std; const int BASE = 50; int n; int a[1005]; int cnt[105];//i出现的次数存在 cnt[i+BASE] int main() { //输入 cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; //计数 for(int i=1;i<=n;i++) { //a[i] 的出现次数 ++ cnt[a[i]+BASE]++; } //找最大值 for(int i=-50;i<=50;i++){ if(cnt[i+BASE]*2>n){ cout<<i<<"\n"; return 0; } } cout<<"no\n"; return 0; }
摩尔投票法
#include <bits/stdc++.h> using namespace std; int n, x; int a[1005]; int main() { cin >> n; int ans = 100, cnt = 0; for (int i = 1; i <= n; i++) { cin >> a[i]; if (a[i] == ans) cnt++; else if(cnt > 0) cnt--; else { ans = a[i]; cnt = 1; } } // 验证 cnt = 0; for(int i = 1; i <= n; i++) if (a[i] == ans) cnt ++; if (cnt * 2 > n) cout << ans; else cout << "no"; return 0; }
- 1
信息
- ID
- 406
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 98
- 已通过
- 33
- 上传者