最长递增的区间长度

最长递增的区间长度_第1张图片
原题目链接: https://edu.csdn.net/skill/program/28752?practiceId=5747247

题目描述
给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3

输入描述:
第一行输入整数n。(1<=n<=10000)表示数组的大小 第二行给出n个整数a.(-1e9<=a<=1e9)

输出描述:
nan

示例
示例1
输入
6
5 2 3 8 1 9
输出
3

其实对执行结果,不太满意,欢迎各位大神提出宝贵的改进意见

import java.util.ArrayList;
import java.util.Scanner;

class Main {
	// CSDN给定的代码部分
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str_0 = scan.nextLine().trim();
		int n = Integer.parseInt(str_0);
        String str_1 = scan.nextLine();
        String[] line_list_1 = str_1.trim().split(" ");        
        ArrayList<Integer> arr = new ArrayList<>();
        for(int i = 0; i < line_list_1.length; i++){
            arr.add(Integer.parseInt(line_list_1[i]));
        }
    

        scan.close();

        int result = solution(n, arr);

        System.out.println(result);

    }
	// 主要的逻辑执行方法
    public static int solution(int n, ArrayList<Integer> arr){
        int result = 0;
        // 以下为解决问题的代码部分
        // 判断测试数据,如果给定的数组只有一个,则直接返回
        if (arr.size() <= 1){
            return arr.size();
        }
        // 申请临时数,用于保存连续增长的个数,默认为1
        int tempNum = 1;
        // 向原数组内增加一个最小的Integer的数据,保证接下来的判断不会越界报错,最小的数不会影响递增结果
        arr.add(Integer.MIN_VALUE);
        for (int i = 0; i < n; i++) {
        	// 获取当前数据下一个数据
            int j = i +1;
            // 判断当前数和下一个数的大小
            if (arr.get(j).compareTo(arr.get(i))>0){
            	// 接下来的数据大于当前数据,则递增结果 +1
                tempNum++;
            } else {
            	// 返回的结果与本段数据递增结果相比,取数值大的保存起来
                result = Math.max(result,tempNum);
                // 设置下一段递增数据的个数为1,原数组增加Integer数据最小的数值,也能够保证遍历完整个数组后,执行连续递增结果和result数值的对比,避免本身就是连续递增的数组无法与result进行比较的情况(因为本身就是递增情况下,无法进入此 else 分支)
                tempNum = 1;
            }
        }
        // 返回 result 结果
        return result;
    }
}

执行结果如下:
最长递增的区间长度_第2张图片
其实想着通过线程池再进行优化,但并没有像预期那样顺利,希望有大佬指教优化

你可能感兴趣的:(每日一练,数据结构)