【发布时间】:2023-02-02 20:48:19
【问题描述】:
问题陈述:
- 给你一个数字n,代表数组a的大小。
- 给你 n 个数字,代表数组 a 的元素。
- 您需要为数组的所有元素“右侧的下一个更大的元素”
- 为您处理输入和输出。
元素 x 的“右边的下一个更大的元素”定义为 x 右边第一个值大于 x 的元素。
注意 -> 如果一个元素的右侧没有任何元素大于它, 考虑 -1 因为它是“右边的下一个更大的元素”
例如对于数组 [2 5 9 3 1 12 6 8 7]
2 的下一个更大的是 5
下一个大于 5 的是 9
9 的下一个大数是 12
3 的下一个更大的是 12
下一个大于 1 的是 12
12 的下一个更大的是 -1
6 的下一个更大的是 8
下一个更大的 8 是 -1
7 的下一个更大的是 -1
#include <iostream> #include <stack> #include <vector> using namespace std; void display(vector<int> a){ for(int i=0;i<a.size();i++){ cout<<a[i]<<endl; } } vector<int> solve(vector<int> arr){ vector<int> v; stack<int> st; st.push(arr[arr.size()-1]); v[arr.size()-1] = -1; for(int i=arr.size()-2;i>=0;i--){ while(!st.empty() && arr[i]>=st.top()){ st.pop(); } if(st.empty()){ v[i] = -1; }else{ v[i] = st.top(); } st.push(arr[i]); } return v; } int main() { int n; cin>>n; vector<int> arr(n,0); for(int i=0;i<n;i++){ cin>>arr[i]; } vector<int> nge(n,0); nge = solve(arr); display(nge); return 0; }这是我的代码,它给出了分段错误,所以需要帮助才能知道我的代码中的错误。
【问题讨论】:
-
是的,谢谢。矢量<int> v(arr.size(),0)
-
如果您不知道,您应该在发布到 StackOverflow 之前自己进行调试。
标签: c++