【问题标题】:Next Greater Element in the Right using Vector使用 Vector 在右侧的下一个更大的元素
【发布时间】:2023-02-02 20:48:19
【问题描述】:

问题陈述:

  1. 给你一个数字n,代表数组a的大小。
  2. 给你 n 个数字,代表数组 a 的元素。
  3. 您需要为数组的所有元素“右侧的下一个更大的元素”
  4. 为您处理输入和输出。

    元素 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++


【解决方案1】:

vector&lt;int&gt; v; 是一个空的vector,它在v[arr.size()-1] = -1; 处崩溃。当您将其更改为 vector&lt;int&gt; v(arr.size()); 时,它将起作用,因为 vector 具有足够的元素:https://godbolt.org/z/vcrKe4Ecf

旁注:

  • vector&lt;int&gt; a作为参数进行复制,使用const vector&lt;int&gt; &amp;a避免复制。
  • for(int i=0;i&lt;a.size();i++) 会给你一个警告,因为a.size() 返回一个无符号类型。 i 的理想类型是size_t,这是a.size() 返回的类型。更好的是一个范围for循环:for (const auto&amp; val: a)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多