提高它的效率 #include<iostream> #include <map> using namespace std: intn,x,cnt; map<int,int> mp; int main() cin >> n; for (int i= 1;i<= n;it+) cin >>x; mp[x]++; for (auto it : mp) cnt = max(cnt,it.second); if (cnt > n/2) cout << x << endl;else cout <<"No" << endl; return 0;
时间: 2023-12-20 19:03:20 浏览: 70
使用include <iostream>时一定要加using namespace std
这段代码的时间复杂度为 O(n log n),主要是因为使用了 map 容器。map 容器的底层实现是红黑树,查找、插入、删除等操作的时间复杂度都是 O(log n)。因此,如果数据量很大,这段代码的执行效率就会比较低。
为了提高效率,可以考虑使用摩尔投票算法进行优化。摩尔投票算法是一种时间复杂度为 O(n) 的算法,可以在给定一组数字中找到出现次数超过一半的数字。具体实现如下:
```c++
#include <iostream>
using namespace std;
int main() {
int n, x, cnt = 0, res = -1;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
if (cnt == 0) {
res = x;
cnt = 1;
} else if (x == res) {
cnt++;
} else {
cnt--;
}
}
cnt = 0;
for (int i = 0; i < n; i++) {
if (res == x) cnt++;
}
if (cnt > n / 2) {
cout << res << endl;
} else {
cout << "No" << endl;
}
return 0;
}
```
这段代码中,使用了一个变量 res 记录当前出现次数最多的数字,使用一个变量 cnt 记录 res 出现的次数。在循环过程中,如果 cnt 为 0,则将 res 设置为当前数字并将 cnt 设为 1;如果当前数字与 res 相等,则将 cnt 加 1;否则将 cnt 减 1。
在第一次循环结束后,res 中存储的就是出现次数最多的数字。接着,再使用一个循环计算 res 在给定数字中出现的次数,最后判断是否超过一半即可。
摩尔投票算法的时间复杂度为 O(n),比使用 map 容器的方法效率更高。
阅读全文