在已知的一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大。如:1 3 2 12 1 5 3 10 7 9 8 23 85 43,这些数中被标注红色字体的都是支撑数。将这些支撑数重新排列成一组数:3 12 5 10 9 85,其中被标注蓝色字体的数又是新数列中的支撑数,将蓝色数重新排列后又得到一组新数:12 10,这时再也找不到支撑数了,最后将12 10输出来。
import java.util.Arrays;
/**
*
* 题目:在已知的一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边
* 相邻的数大。如:1 3 2 12 1 5 3 10 7 9 8 23 85 43,这些数中被标注红色字体的都是支撑数。将这些支
* 撑数重新排列成一组数:3 12 5 10 9 85,其中被标注蓝色字体的数又是新数列中的支撑数,将蓝色数重新排列
* 后又得到一组新数:12 10,这时再也找不到支撑数了,最后将12 10输出来。
*
* @author zql
*
*/
public class Test {
public static void main(String[] args) {
int[] a = {1, 3, 2, 12, 1, 5, 3, 10, 7, 9, 8, 23, 85, 43};
// 用于存放新数组
int[] b = new int[a.length/2];
while (true) {
int index = 0;
for (int i = 1; i < a.length - 1; i++) {
if (a[i] > a[i - 1] && a[i] > a[i + 1]) {
b[index++] = a[i];
}
}
// index 等于 0 时说明已经没有支撑数
if (index == 0) {
break;
} else {
a = arrSub(b,index);
}
}
System.out.println(Arrays.toString(a));
}
/**
* 对新数组进行减容处理
*
* @param arr 新数组
* @param len 新数组最终长度
* @return
*/
public static int[] arrSub(int[] arr, int len) {
int[] r = new int[len];
for (int i = 0; i < len; i++) {
r[i] = arr[i];
}
return r;
}
}