數字右邊第一個大於它的數(單調棧)

yyyzhhhhh發表於2020-10-09

維護一個單調遞減的棧,在新數字壓棧前,可能需要彈出舊數字,這個新數字就是彈出的舊數字右邊第一個比他大的數字。

程式碼:

vector<int> func(vector<int>& v){
 vector<int> res(v.size(), -1);
 stack<int> st;
 st.push(0);
 for(int i = 1; i < len; i++){
  while(!st.empty() && v[i] > v[st.top()]){
   res[st.top()] = v[i];
   st.pop();
  }
  st.push(i);
 }
 return res;
}

相關文章