牛牛的数列

JAVA版本dp

public int maxSubArrayLength (int[] nums) {
        int len = nums.length;
        if(len == 0){
            return 1;
        }
        // 以 head[i]为头的最长子序列
        int[] head = new int[len];
        // 以 tail[i]为尾的最长子序列
        int[] tail = new int[len];

        for(int i = 0 ; i < len ; i ++){
            if(i == 0){
                tail[i] = 1;
            }else{
                if(nums[i] > nums[i-1]){
                    tail[i] = tail[i-1] + 1;
                }else {
                    tail[i] = 1;
                }
            }
        }
        for(int i = len - 1; i >= 0; i --){
            if(i == len - 1){
                head[i] = 1;
            }else{
                if(nums[i + 1] > nums[i]){
                    head[i] = head[i+1] + 1;
                }else {
                    head[i] = 1;
                }
            }
        }
        int max = 1;
        for(int i = 1 ; i < len - 1 ; i ++){
            max = Math.max(max , Math.max(head[i] , tail[i]));
            //判断前后的两个值得差值是不是大于2,如果大于2说明就可以改变当前值
            if(nums[i+1] - nums[i-1] >= 2){
                max = Math.max(max , head[i + 1] + tail[i - 1] + 1);
            }
        }
        return max;

    }