import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
    public int maxSubArrayLengthTwo (int[] nums) {
        if(nums.length <= 2){
            return nums.length;
        }
        int[] left = new int[nums.length];//左侧单调递增长度
        int[] right = new int[nums.length];//右侧单调递增长度
        int res = 0;
        left[0] = 1;
        right[nums.length - 1] = 1;
        for (int i = 1; i < nums.length; i++) {
            if(nums[i] > nums[i - 1]){
                left[i] = left[i - 1] + 1;
            }else {
                left[i] = 1;
            }
        }
        for (int i = nums.length - 2; i >= 0; i--) {
            if(nums[i] < nums[i + 1]){
                right[i] = right[i + 1] + 1;
            }else {
                right[i] = 1;
            }
        }
        for (int i = 0; i < nums.length; i++) {
            if(i == 0){//边界情况
                res = nums[1] == 1 ? Math.max(res,right[i]) : Math.max(res,right[i + 1] + 1);
                continue;
            }
            if(i == nums.length - 1){//边界情况
                res = nums[nums.length - 2] == (int)Math.pow(10,5) ? Math.max(res,left[i]) : Math.max(res,left[i - 1] + 1);
                continue;
            }
            if(nums[i + 1] - nums[i - 1] > 1){//两边可续上
                res = Math.max(res,left[i - 1] + right[i + 1] + 1);
            }else{//只能和其中一侧续上
                if(nums[i + 1] != 1 && nums[i - 1]!= (int)Math.pow(10,5)){//左右都能选
                    res = Math.max(res,Math.max(left[i - 1],right[i + 1]) + 1);
                }else if(nums[i + 1] == 1 && nums[i - 1]!= (int)Math.pow(10,5)){//只能选左侧
                    res = Math.max(res,left[i - 1] + 1);
                }else if(nums[i + 1] != 1 && nums[i - 1]== (int)Math.pow(10,5)){//只能选右侧
                    res = Math.max(res,right[i + 1] + 1);
                }else {//都选不了
                    res = Math.max(res,1);
                }
            }
        }
        return res;
    }
}

10的5次方和1都是边界,看了下大家都没考虑这个上边界呢,估计是用例不太全吧