小红书笔试

1.常规DP
public int pathSum(int[][] array) {
        int[][] dp = new int[array.length][array[0].length];
        for (int i = 0;i < array[0].length;i++) {
            dp[0][i] = array[0][i];
        }

        for(int i = 1;i < array.length;i++) {
            for(int j = 0;j < array[0].length;j++) {
                dp[i][j] = dp[i - 1][j];
                if(j > 0) {
                    dp[i][j] = Math.max(dp[i][j],dp[i - 1][j - 1]);
                }
                if(j != array[0].length - 1) {
                    dp[i][j] = Math.max(dp[i][j],dp[i - 1][j + 1]);
                }
                dp[i][j] += array[i][j];
            }
        }
        int ans = 0;
        for(int i = 0;i < array[0].length;i++) {
            ans = Math.max(ans,dp[array.length - 1][i]);
        }
        return ans;
    }
2.二分
public static void main(String[] args) {
        int N = 0;
        int k = 0;
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        k = sc.nextInt();
        int[] nums = new int[N];
        for(int i = 0;i < N;i++) {
            nums[i] = sc.nextInt();
        }
        Arrays.sort(nums);
        int left = 0;
        int right = nums[nums.length - 1] - nums[0];
        while(left < right) {
            int mid = (left + right + 1) >> 1;
            if(check(nums,k,mid)) {
                left = mid;
            }else {
                right = mid - 1;
            }
        }
        System.out.println(left);
    }

    private static boolean check(int[] nums, int k, int mid) {
        int res = 1;
        int last = nums[0];
        for(int i = 1;i < nums.length;i++) {
            if(nums[i] - last >= mid) {
                res++;
                last = nums[i];
            }
        }
        return res >= k;
    }



#小红书笔试##笔试题目#
全部评论
请问可以切换到自己电脑的本地IDE吗
点赞 回复 分享
发布于 2023-04-07 21:36 辽宁
前端的题简单得有点离谱
点赞 回复 分享
发布于 2022-03-28 12:43
大佬 第二题可以讲下思路吗
点赞 回复 分享
发布于 2022-03-28 00:22

相关推荐

04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
评论
6
6
分享

创作者周榜

更多
牛客网
牛客企业服务