import java.util.Arrays;
public class Solution {
// 向上修改数组
public static int updateArrayUp(int[] nums, int k) {
int n = nums.length;
if (k + 1 < n){
nums[k + 1] = nums[k] + 1;
}
return subArray(nums);
}
// 向下修改数组
public static int updateArrayDown(int[] nums, int k) {
int n = nums.length;
if (k + 1 < n){
if (nums[k + 1] > 1) nums[k] = nums[k + 1] - 1;
}
return subArray(nums);
}
// 求修改后最长子数组长度
public static int subArray(int[] nums) {
int n = nums.length;
int maxLen = 0;
int i = 0;
while (i < n){
int j = i;
while (j + 1 < n && nums[j] < nums[j + 1]){
j++;
}
maxLen = Math.max(maxLen, j - i + 1);
i = j + 1;
}
return maxLen;
}
// 逐一修改位置求子数组长度
public static int maxSubArray(int[] nums) {
int maxLen = 0;
int n = nums.length;
for (int i = 0; i < n; i++) {
maxLen = Math.max(maxLen, updateArrayUp(Arrays.copyOf(nums, n), i));
maxLen = Math.max(maxLen, updateArrayDown(Arrays.copyOf(nums, n), i));
}
return maxLen;
}
public static void main(String[] args) {
// int[] arr= {1, 2, 3, 4, 5};
// int[] arr= {5, 4, 3, 2, 1};
// int[] arr= {2, 6, 2, 3, 1};
// int[] arr= {8, 6, 2, 3};
int[] arr= {5, 6, 7, 3, 10, 12, 13, 6};
// int[] arr= {1};
// int[] arr= {0};
int res = maxSubArray(arr);
System.out.println(res);
}
}
#360笔试#