【单调栈】比当前值大或小

  • 对于这样寻找最大值,我们是通过【主动】遍历的方式实现的
  • 遍历nums数组,将当前下标存入栈内前,检查一下当前值能否作为栈顶位置的答案,若可以,则更新答案,并出栈
  • 因此选用单调递减栈
  • 由于该题为循环数组,因此需要遍历检查两次 class Solution {public: vector nextGreaterElements(vector& nums) { int N = nums.size(); vector st, res(N, -1); for (int i = 0; i < 2 N; ++i) { while (!st.empty() && nums[st.back()] < nums[i % N]) { res[st.back()] = nums[i % N]; st.pop_back(); } st.emplace_back(i % N); } return res; }};