1.题目详情
2.思路
(1)数组B是表示A的前缀最大值,是指A中对应下标之前所有元素中的最大的一个元素。这跟202309-2坐标变换(其二)中所用的的前缀和算法不同。前缀和是对应下标之前所有元素的总和。
(2)并且题目中也说明:B数组是单调不减的。所以在算最大值时可以在每次输出后就可以直接加上去。最小值只需要判断他是否大于之前一个元素的值即可。
Java代码如下:
public class SeptemberQuestion {
public static void main(String[] args) {
//2021.9-1 数组推导
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] bi = new int[n];
bi[0] = sc.nextInt();
int max = bi[0];
int min = bi[0];
for (int i = 1; i < n; i++) {
bi[i] = sc.nextInt();
if (bi[i] > bi[i - 1]) {
min += bi[i];
}
max += bi[i];
}
System.out.println(max);
System.out.println(min);
}
}
做CCFCSP真题的一点小启发:
(1)在CCFCSP历年的一二题中都可以在边输入的时候就对输入的数据进行处理,同时把处理后的数据输出。或者是在循环后可以直接对处理后的数据直接进行输出。这样的小技巧更能锻炼出每一步之间的逻辑思维能力。
(2)也可以让自己对题目中的条件变得更加敏感。这种小技巧在前两题上可以会省到1~2个for循环和其他语句。空间和时间复杂度都有一定的提升。当然如果在第三题及其之后的题目中也找到这种逻辑关系的话,一定会对时间和空间复杂度都有很大提升。