Problem: 503. 下一个更大元素 II
文章目录
- 题目描述
- 思路
- 复杂度
- Code
题目描述
思路
由于此题是环形数组,我们在利用单调栈模板的基础上还需要将给定数组扩大一倍,但实际上我们只需要利用取余的操作模拟扩大数组即可(具体操作看代码。在解决有关环形数组的问题时大多数都会涉及到取余操作)
复杂度
时间复杂度:
O ( n ) O(n) O(n);其中 n n n为数组nums的长度
空间复杂度:
O ( n ) O(n) O(n)
Code
class Solution {/*** Next Greater Element II** @param nums Given array* @return int[]*/public int[] nextGreaterElements(int[] nums) {int n = nums.length;int[] res = new int[n];Stack<Integer> stack = new Stack<>();for (int i = 2 * n - 1; i >= 0; --i) {while (!stack.isEmpty() && stack.peek() <= nums[i % n]) {stack.pop();}res[i % n] = stack.isEmpty() ? -1 : stack.peek();stack.push(nums[i % n]);}return res;}
}