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;
    }
};
上一篇下一篇

猜你喜欢

热点阅读