具体的想法是利用栈存储数组下标,遍历数组,如果数组中的第i元素比数组中(栈顶元素作为下标)的元素大,那么首先结果数组中的(栈顶元素作为下标)的值为i-stack.pop(),这里同时执行出栈操作,继续循环,遍历完数组后,对栈中剩余元素下标 在结果数组处赋值
public static int[] getArr(int[] nums) {
int[] newArr = new int[nums.length];
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < nums.length; i++) {
while (!stack.empty() && nums[i] >= nums[stack.peek()]) {
newArr[stack.peek()] = i - stack.pop();
}
stack.push(i);
}
while (!stack.empty()) {
newArr[stack.pop()] = -1;
}
return newArr;
}
这个亦可以作为找到第一个比它大的元素并返回