503. 下一个更大元素 II
Posted Debroon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了503. 下一个更大元素 II相关的知识,希望对你有一定的参考价值。
503. 下一个更大元素 II
题目
算法设计:单调栈
前置知识:单调栈原理,请猛击:496. 下一个更大元素 I
和 496. 下一个更大元素 I 这题相同,唯一变化是数组变成了循环数组。
比如输入 [1, 2, 1]
,循环数组应该返回 [2, -1, 2]
,而不是 [2, -1, -1]
,因为拥有了环形属性,最后一个元素 1 绕了一圈后找到了比自己大的元素 2。
对于这种需求,思路是将数组长度翻倍:
- 原数组:2, 3, 1
- 拉直数组:2, 3, 1, 2, 3, 1
这样原数组的末尾 1,就可以找到右边第一个更大的元素 2。
class Solution
public:
vector<int> nextGreaterElements(vector<int>& nums)
stack<int> s;
vector<int> res(nums.size());
for (int i = nums.size() - 1; i >= 0; i--) // 预先存下数组,实现数组翻倍
s.push(nums[i]);
for (int i = nums.size() - 1; i >= 0; i--)
while (!s.empty() && s.top() <= nums[i])
s.pop();
res[i] = s.empty()? -1: s.top();
s.push(nums[i]);
return res;
;
以上是关于503. 下一个更大元素 II的主要内容,如果未能解决你的问题,请参考以下文章