【发布时间】:2019-02-20 02:07:53
【问题描述】:
如何重新排列给定整数数组的元素,以使每个最大严格升序子数组的元素反转?
例如,给定数组{ 5, 7, 10, 4, 2, 7, 8, 1, 3 },执行此方法后,数组的元素为{ 10, 7, 5, 4, 8、7、2、3、1}。
我的尝试仅按降序对整数进行排序。如何使这些嵌套循环识别最大严格升序子数组?我相信外循环应该必须反复找到当前升序序列的结尾,而内循环将子数组反转到该点。
public class MyClass {
public static void main(String args[]) {
int[] arr = {5, 7, 10, 4, 2, 7, 8, 1, 3};
for (int i=0; i<arr.length-1; i++) {
if (arr[i] < arr[i+1]) {
int t = arr[i+1];
arr[i+1] = arr[i];
arr[i] = t;
}
for (int j=0; j<arr.length-1; j++) {
if (arr[j] < arr[j+1]) {
int t = arr[j+1];
arr[j+1] = arr[j];
arr[j] = t;
}
}
}
String result = Arrays.toString(arr);
System.out.println(result); // [10, 8, 7, 7, 5, 4, 3, 2, 1]
}
}
【问题讨论】:
-
你为什么要这样嵌套循环?
-
提示:在找到子序列的结尾之前不要交换任何东西
-
冒泡排序会更好。
标签: java arrays for-loop nested-loops