C++ 代码优化:寻找数列中下一个更大元素的正确方法
#include
在题目的要求中,当数列 A 中没有右边比当前元素大的数时,数列 B 对应的位置应该为 0。但是这段代码在遇到这种情况时,直接输出了一个未初始化的变量 m,导致输出结果是不确定的。
以下是修正后的代码:
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
vector<int> findNextGreaterIndex(const vector<int>& A) {
int n = A.size();
vector<int> B(n, 0);
stack<int> st;
for (int i = 0; i < n; i++) {
while (!st.empty() && A[i] > A[st.top()]) {
B[st.top()] = i + 1;
st.pop();
}
st.push(i);
}
return B;
}
int main() {
int n;
cin >> n;
vector<int> A(n);
for (int i = 0; i < n; i++) {
cin >> A[i];
}
vector<int> B = findNextGreaterIndex(A);
for (int i = 0; i < n; i++) {
cout << B[i] << ' ';
}
cout << endl;
return 0;
}
这个修正后的代码使用了辅助函数 findNextGreaterIndex 来正确处理数列 A 中没有比当前元素大的数的情况。在这个函数中,我们将数列 B 的初始值设为 0,表示没有找到右边比当前元素大的数。然后,通过遍历数列 A,并使用栈来记录元素的下标,处理了所有情况,并返回数列 B。
希望这次修改能够满足你的需求!如果你还有其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/RoJ 著作权归作者所有。请勿转载和采集!