问题描述:
对于一个数组,找到每个数后面第一个比它大的数。如果不存在就返回-1,通过一个新数组返回1
解决方案:
使用一个栈,栈中保存数组的下标。遍历原数组,如果原数组的值比栈顶下标元素值小,直接入栈,不然的话就一直出栈,并且填写新数组栈顶下标位置为原数组当前访问值,出栈后再进行比较,如果栈中最后海油其他元素,则全部弹出,然后他们的位置填写-1。
package Array;
import java.util.Stack;
public class FindNextBigger {
/**
* 问题描述:找出数组中后面第一个比它小的数
* 方法:使用一个栈,压入的是元素的下标,如果比栈顶下标的元素小就入栈,不然就一直出栈,直到比栈顶下标元素小。
*/
public static int[] findNextBigger(int[] arr){
if(arr == null || arr.length == 1){
return arr;
}
int[] newArr = new int[arr.length];
Stack<Integer> stack = new Stack<>();
for(int i = 0; i < arr.length; i++){
if(stack.empty() || arr[i] <= arr[stack.peek()]){
stack.push(i);
}else{
while(!sta