牛牛的数列
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;
}
京公网安备 11010502036488号