题解(不用map,用deque)
2026-02-21 15:23:27
发布于:浙江
13阅读
0回复
0点赞
错误示例:
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
int chazhao(deque<int> a, int x) {
for(int i = 0; i < a.size(); i++) {
if(a[i] == x) {
return i;
}
}
return -1;
}
int main() {
deque<int> a;
for(int i = 0; i < 3; i++) {
cin >> a[i];//❌错误1:空deque的a[0]/a[1]/a[2]不存在,访问越界,直接崩溃
}
int max_ = -2147483648, xia_biao = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < a.size(); i++) {//❌错误2:循环条件是j < ...,但自增的是i!
max_ = max(max_, a[j]);
}
xia_biao = chazhao(a, max_);
cout << a[xia_biao] << " ";
a.erase(a.begin() + xia_biao);
//❌错误3:max第一次找完最大值后,max_保留了第一个最大值,第二次循环时没有重置为最小值,会导致后续一直找同一个最大值(但该元素已经被删除),最终访问越界。
}
}
提交会得到:

正确代码:
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
int chazhao(deque<int> a, int x) {
for(int i = 0; i < a.size(); i++) {
if(a[i] == x) {
return i;
}
}
return -1;
}
int main() {
deque<int> a;
int n;
for(int i = 0; i < 3; i++) {
// 错误1修复:空deque用push_back()添加元素,而非下标赋值
cin >> n;
a.push_back(n);
}
int max_ = -2147483648, xia_biao = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < a.size(); j++) {// 错误2修复:内层循环自增j,而非i
max_ = max(max_, a[j]);
}
xia_biao = chazhao(a, max_);
cout << a[xia_biao] << " ";
a.erase(a.begin() + xia_biao);
// 错误3修复:每次循环快结束时重置max_为最小值
max_ = -2147483648;
}
}
提交了就:
了
这里空空如也








有帮助,赞一个