Next Greater Element II

来源:互联网 发布:dns默认端口 编辑:程序博客网 时间:2024/05/24 06:01

问题描述:

Given a circular array (the next element of the last element is the first element of the array), print the Next Greater Number for every element. The Next Greater Number of a number x is the first greater number to its traversing-order next in the array, which means you could search circularly to find its next greater number. If it doesn't exist, output -1 for this number.

示例:

Input: [1,2,1]Output: [2,-1,2]Explanation: The first 1's next greater number is 2; 
The number 2 can't find next greater number;
The second 1's next greater number needs to search circularly, which is also 2.

Note: The length of given array won't exceed 10000.

问题分析:

利用栈结构,遍历两次数组,对于能找打nextGreater元素,将它的值设置为nextGreater的值,其余的找不到的设置为-1。


过程详见代码:

class Solution {public:    vector<int> nextGreaterElements(vector<int>& nums) {        int n = nums.size();vector<int> next(n, -1);stack<int> s; // index stackfor (int i = 0; i < n * 2; i++) {int num = nums[i % n];while (!s.empty() && nums[s.top()] < num) {next[s.top()] = num;s.pop();}if (i < n) s.push(i);}return next;    }};

原创粉丝点击