找出前邊比自己高的人的身高--字節筆試題
題目描述
存在一個多組的輸入,第一行輸入是有N個同學,接下來的一行分別是N個同學的身高。某同學X前的第一個比他高的同學,記錄下其身高值。返回是一行每個同學對應找到的其前邊的第一個比自己高的身高值。
示例
例如1:
輸入:
5
1 2 3 4 5
輸出: -1 -1 -1 -1 -1
例如2:
輸入:
5
5 4 3 2 1
輸出:
-1 5 4 3 2
Java代碼
package ncompanydemos.p2_bytedance;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;
/**
* @author jiyongjia
* @create 2020/7/11 - 20:28
* @descp: 本地idea中是ctrl+d來停止scanner的輸入無法停止的問題
*/
public class Exam03{
//輸入輸出問題
public static void main(String[] args){
Scanner in = new Scanner(System.in);
ArrayList<Deque<Integer>> lis = new ArrayList<>();
while(in.hasNext()){
int n = in.nextInt();
int[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i] = in.nextInt();
}
//調用方法
Deque<Integer> stack = solve(n,arr);
lis.add(stack);
}
//遍歷出結果集
for(Deque<Integer> d : lis){
while(!d.isEmpty()){
System.out.print(d.pop()+" ");
}
System.out.println();
}
}
//處理算法
public static Deque<Integer> solve(int n,int[] arr){
Deque<Integer> stack = new LinkedList<Integer>();
if(n==1) {
stack.push(-1);
return stack;
}
for(int i=arr.length-1;i>=1;i--){
boolean flag = false;
for(int j=i-1;j>=0;j--){
if(arr[j]>arr[i]){
stack.push(arr[j]);
flag = true;//代表存入了值
break;
}
}
//如果內層for一直沒有比當前大的值,就存-1進去
if(!flag){
stack.push(-1);
}
}
//最外層循環是處理到i=1結束的,最前邊的那個值始終放-1;
stack.push(-1);
return stack;
}
}
輸出
在線編程時候還是沒通過,只通過自測用例,估計程序時間復雜度問題吧!要么就是磨人的輸入輸出有問題