单调栈经典操作
给你一个数组 [2,1,2,4,3],你返回数组 [4,2,4,-1,-1]。
解释:第一个 2 后面比 2 大的数是 4; 1 后面比 1 大的数是 2;第二个 2 后面比 2 大的数是 4; 4 后面没有比 4 大的数,填 -1;3 后面没有比 3 大的数,填 -1。
1、右边第一个数比它大,从右边开始循环
2、左边第一个数比它大,从左边开始循环

1 vector<int> nextGreaterElement(vector<int>& nums) { 2 vector<int> ans(nums.size()); // 存放答案的数组 3 stack<int> s; 4 for (int i = nums.size() - 1; i >= 0; i--) { // 倒着往栈里放 5 while (!s.empty() && s.top() <= nums[i]) { // 判定个子高矮 6 s.pop(); // 矮个起开,反正也被挡着了。。。 7 } 8 ans[i] = s.empty() ? -1 : s.top(); // 这个元素身后的第一个高个 9 s.push(nums[i]); // 进队,接受之后的身高判定吧! 10 } 11 return ans; 12 }
Mamba never out

浙公网安备 33010602011771号