美文网首页
Next Greater Element II

Next Greater Element II

作者: 我叫胆小我喜欢小心 | 来源:发表于2017-04-15 20:42 被阅读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;
        }
    };
    

    相关文章

      网友评论

          本文标题:Next Greater Element II

          本文链接:https://www.haomeiwen.com/subject/vgloattx.html