2024.09.14 360笔试-盘古开天辟地

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笔试#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务