求一整型陣列的嚴格單調的最長連續子序列的長度
阿新 • • 發佈:2019-01-04
求最長連續單調子序列
package adk; import java.util.ArrayList; import java.util.Collections; import java.util.Random; public class SearchMax { public static void main(String[] args) { // 模擬有50個1到100(包括1和100)的數 int[] arr = new int[50]; for (int i = 0; i < 50; i++) { arr[i] = new Random().nextInt(100) + 1; } // 先列印一下陣列 for (int i : arr) { System.out.print(i + ","); } System.out.println(); // 換行 // 呼叫最長連續單點子序列方法 int length = longestConMonoSubArr(arr); System.out.println(length); } //求陣列中最長遞增子序列 private static int longestConMonoSubArr(int[] arr) { // 判斷陣列是都為空,為空返回0 if (arr.length <= 0) return 0; int first = 0; int last = 0; int index = 0; // 各種長度的連續單調子序列長度,都放入集合中,一會比較出最大值; ArrayList<Integer> list = new ArrayList<>(); // 1 單點遞增連續子序列的情況,沒有破壞陣列的元素順序 for (int i = 1; i < arr.length; i++) { if (arr[i - 1] < arr[i]) { last = i; } else { index = last - first + 1; // 連續遞增中斷,記錄子序列長度 list.add(index); // 儲存到集合中 first = last = i; // 指標歸到i所在位置繼續 } } // 2 單調遞減連續子序列情況 for (int i = 1; i < arr.length; i++) { if (arr[i - 1] > arr[i]) { last = i; } else { index = last - first + 1; // 連續遞減中斷,記錄子序列長度 list.add(index); // 也,儲存到集合中 first = last = i; // 指標歸到i所在位置繼續 } } Integer max = Collections.max(list); // 求出集合中的最大值,即子序列的最大值 return max; } }