去宜信面试一道面试题
输出数组中每个元素以及后面第一个比它大的元素二元组,若没有则输出-1,不必按数组顺序输出。
例如[7,2,3,8,6,9,1],
则输出(7,8),(2,3),(3,8),(8,9),(6,9),(9,-1),(1,-1).输出顺序不要求。
public class Study2 {
public static void main(String[] args) {
printArr(new int[]{7,2,3,8,6,9,1});
}
public static void printArr(int[] arr){
Stack<Integer> s = new Stack<>();
for(int i=0; i<arr.length; i++){
if(s.isEmpty()) s.push(arr[i]);
else{
while(!s.isEmpty()&&s.peek()<arr[i]){
System.out.println(s.pop() + " , " + arr[i]);
}
s.push(arr[i]);
}
}
while(!s.isEmpty()){
System.out.println(s.pop() + " , " + "-1");
}
}
}
第一次思考觉得可能要使用排序等方法,因为要找到后面比它大的第一个数,还要考虑下标索引。后来提示了一下,原来可能用栈来实现。具体来说,遍历数组,当栈顶元素小于当前值时则出栈并且输出,一直到栈为空或者栈顶元素大于当前值。这样一来,栈中剩余元素其实是递减的,最后遍历一遍栈,全部与-1结合输出即可。若能想到用栈,就很简单了。