学到了一个求环形数组下标的方法:一般是通过 % 运算符求模(余数)
int[] arr = {1,2,3,4,5};
int n = arr.length, index = 0;
while (true) {
print(arr[index % n]);
index++;
}
这道题求两轮数组即可
public int[] nextGreaterElements(int[] nums) {
int[] res = new int[nums.length];
Deque<Integer> stack = new LinkedList<>();
// 将数组扩大一倍,也就是求两轮
for (int i = 0; i < 2 * nums.length - 1; i++){
int val = nums[i % nums.length];
while (!stack.isEmpty() && nums[stack.peek()] < nums[i % nums.length]){
res[stack.pop()] = val;
}
if (i < nums.length) { // 元素只在第一轮的时候入栈,第二轮只是处理未确定的元素
stack.push(i);
}
}
while (!stack.isEmpty()){
res[stack.pop()] = -1;
}
return res;
}