
- 把这个循环数组「拉直」,即复制该序列的前 n−1 个元素拼接在原序列的后面。这样我们就可以将这个新序列当作普通序列,用上文的方法来处理。
- 不需要显性地将该循环数组「拉直」,而只需要在处理时对下标取模即可。
- stack里存index,便利数组
- 遇到比栈顶小的数,把这个数的index压栈
- 遇到比栈顶大的数,不停地pop栈,计算对应index的nge
class Solution {
public int[] nextGreaterElements(int[] nums) {
int len = nums.length;
int[] res = new int[len];
Arrays.fill(res, -1);
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < 2 * len - 1; i++) {
int cur = i % len;
if (stack.isEmpty() || nums[cur] <= nums[stack.peek()]) {
stack.push(cur);
} else {
while (!stack.isEmpty() && nums[cur] > nums[stack.peek()]) {
res[stack.pop()] = nums[cur];
}
stack.push(cur);
}
}
return res;
}
}