求一整型数组的严格单调的最长连续子序列的长度

来源:互联网 发布:如何查网络摄像头 编辑:程序博客网 时间:2024/06/06 02: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) {// 判断数组是都为空,为空返回0if (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;}}


原创粉丝点击