牛牛的数列
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; }