Next Greater Element II
2017-04-15 本文已影响24人
我叫胆小我喜欢小心
题目来源
求出数组中每一个数的下一个大于该数的数,没有的话则输出-1。
一开始没啥想法,然后看了tags中说用栈来实现,然后想了想就知道该怎么做了。代码如下:
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
stack<int> s;
int n = nums.size();
vector<int> res(n, -1);
for (int i=0; i<2*n; i++) {
while (!s.empty() && nums[i%n] > nums[s.top()]) {
res[s.top()] = nums[i%n];
s.pop();
}
if (res[i%n] == -1)
s.push(i % n);
}
return res;
}
};
遍历到一个元素,先判断该元素与栈中索引所在元素的大小,若大于,则填入栈中索引位置,将栈中索引出栈,然后入栈该元素索引。因为是循环的,所以遍历两遍。
稍作简化,如下:
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
stack<int> s;
int n = nums.size();
vector<int> res(n, -1);
for (int i=0; i<2*n; i++) {
int num = nums[i%n];
while (!s.empty() && num > nums[s.top()]) {
res[s.top()] = num;
s.pop();
}
if (i < n)
s.push(i);
}
return res;
}
};