小红书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); }