题目描述
这天小明买彩票中了百亿奖金,兴奋的他决定买下蓝桥公司旁的一排连续的楼房。
已知这排楼房一共有 NN 栋,编号分别为 1∼N1∼N,第 ii 栋的高度为 hihi。
好奇的小明想知道对于每栋楼,左边第一个比它高的楼房是哪个,右边第一个比它高的楼房是哪个(若不存在则输出 −1−1)。但由于楼房数量太多,小明无法用肉眼直接得到答案,于是他花了 11 个亿来请你帮他解决问题,你不会拒绝的对吧?
输入描述
第 11 行输入一个整数 NN,表示楼房的数量。
第 22 行输入 NN 个整数(相邻整数用空格隔开),分别为 h1,h2,...,hNh1,h2,...,hN,表示楼房的高度。
1≤N≤7×1051≤N≤7×105,1≤hi≤1091≤hi≤109。
输出描述
输出共两行。
第一行输出 NN 个整数,表示每栋楼左边第一栋比自己高的楼的编号。
第二行输出 NN 个整数,表示每栋楼右边第一栋比自己高的楼的编号。
输入输出样例
示例 1
输入
5
3 1 2 5 4
输出
-1 1 1 -1 4
4 3 4 -1 -1
解答:
package 第四章;
import java.util.Arrays;
import java.util.Scanner;
public class 百亿富翁 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
int[] left = new int[n];
int[] right = new int[n];
left[0] = -1;
right[n - 1] = -1;
Arrays.fill(left, -1);
Arrays.fill(right, -1);
int index = 0;
for (int i = 1; i < left.length; i++) {
int flag = 0;
for (int j = i - 1; j>= 0; j--) {
if (a[j] > a[i]) {
index = j + 1;
flag = 1;
break;
}
}
if(flag == 0) {
index = -1;
}
left[i] = index;
}
for (int i = 0; i < right.length - 1; i++) {
int flag = 0;
for (int j = i + 1; j < right.length; j++) {
if (a[j] > a[i]) {
index = j + 1;
flag = 1;
break;
}
}
if(flag == 0) {
index = -1;
}
right[i] = index;
}
for (int i = 0; i < left.length; i++) {
System.out.print(left[i]+" ");
}
System.out.println();
for (int i = 0; i < right.length; i++) {
System.out.print(right[i]+" ");
}
}
}