解题思路:
整体思路有点像映射的关系,如果存在对应元素的比它第一个大的数,就在一个数组对应位置存在这个大值,具体思路如下:
利用栈,从左到右依次压入数组中元素的索引,每次判断待压入的下一个元素是否大于占栈顶索引对应的元素,若大于,就将元素存到一个新的数组res中,将栈顶索引出栈,对应位置就是栈中刚刚出栈的索引,若小于就压入栈中。最后判断一下剩余的元素,没有大于它的就在res索引位置置-1.
代码实现:
public class Test{
public static int[]findMax(int []arry){
int len=arry.length;
int i=0;
int []res=new int[len];
Stack<Integer> sk=new Stack<Integer>();
while(i<len){
if(sk.isEmpty()||arry[i]<arry[sk.peek()]){
sk.push(i);
i++;
}else{
res[sk.pop()]=arry[i];
}
}
while(!sk.isEmpty()){
res[sk.pop()]=-1;
}
return res;
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
int array[]=new int[] {1,5,3,6,4,8,9,10};
int res[]=findMax(array);
for(int num:res) {
System.out.println(num);
}
}