小红书723笔试记录

做麻了,第一题就是简单的模拟,想到了long,但是最后sum不是long,

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        long[] dp = new long[n];
        int id = 0;
        for(int i=0; i<n; i++){
            dp[i] = (long) (i + 1) *k;
        }
        long sum = 0;
        for(long num : dp){
            sum +=num;
        }
        System.out.println(sum);

    }

第二题没看明白输出是什么,卡了好久

第三题想到了dp,但是时间不够了,交卷后写完了,

 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for(int i=0; i< t;i++){
            int n = sc.nextInt();
            int x = sc.nextInt();
            int[] num = new int[n];
            for(int j=0; j<n;j++){
                num[j] = sc.nextInt();
            }
            maxSum(num,x,n);
        }
    }
    public static void maxSum(int[] num, int x,int n){
        //dp[i][0]表示不修改数组的最大值
        //dp[i][1]表示修改数组的最大值
        int[][] dp = new int[n][2];
        //初始化
        int max = Integer.MIN_VALUE;
        for(int i=0; i<n;i++){
            dp[i][0] = num[i];
        }
        dp[0][1] = x;
        //连续且只能进行一次操作
        for(int i=1; i<n;i++){
            dp[i][0] = Math.max(dp[i-1][0]+num[i],dp[i][0]);
            dp[i][1] = Math.max(dp[i-1][1]+num[i],Math.max(dp[i-1][0]+x,x));
            max = Math.max(Math.max(dp[i][0],dp[i][1]),max);
        }
        System.out.println(max);
    }

全部评论
第一题超时了吧
1 回复 分享
发布于 2023-07-23 22:51 北京
你怎么知道dp[i-1][1]中有没有用过那次修改机会嘞
点赞 回复 分享
发布于 2023-07-23 22:30 江苏
需要的友友可以看看我首页米哈游有大量岗位,实习和正式,可以找我了解。
点赞 回复 分享
发布于 2023-07-23 23:14 上海
大佬能解释一下这一句吗 dp[i][1] = Math.max(dp[i-1][1]+num[i],Math.max(dp[i-1][0]+x,x));
点赞 回复 分享
发布于 2023-07-24 12:58 江苏

相关推荐

不愿透露姓名的神秘牛友
02-14 11:10
点赞 评论 收藏
分享
评论
4
8
分享

创作者周榜

更多
牛客网
牛客企业服务