2020.12.26框子求循环数组的m个最大和
题目描述
输入n个数,围成一圈,求连续m(m<n)个数的和最大为多少?
输入格式
输入的第一行包含两个整数n, m。第二行,共n个整数
输出格式
输出1行,包含一个整数,连续m个数之和的最大值。
样例输入
10 3
9 10 1 5 9 3 2 6 7 4
样例输出
23
数据规模和约定
0<m<n<1000, -32768<=输入的每个数<=32767。
思路
将n个数排成一列,通过一个长度为m的框子围住m个数字,每次前进一个就将框子中的数据出框,进入新的数字。一直到n个数字的末尾后在遍历框子中的数字。代码如下(其中运用了循环数组,提高性能)
代码
class TestPaLou{
int n,k,s,j,t,max;
int[]a;
int[] b;
void test() {
Scanner input = new Scanner(System.in);
n = input.nextInt(); k = input.nextInt();
s = 0; a= new int[k];b = new int[k];
for(int i = 0; i < k; i++) {
a[i] = input.nextInt();
b[i] = a[i];
s+=a[i];
}
j = 0;max = s;
for(int i = k; i < n; i++) { //s = s + t- x ,x要持续更新
//j指向x的下标,j = j % k
t = input.nextInt();
s = s + t - a[j % k];
a[j % k] = t;
j++;
if(max < s) max = s;
}
for(int i = 0; i < k; i++) {
t = b[i];
s = s + t - a[j % k];
a[j % k] = t;
j++;
if(max < s) max = s;
}
System.out.println(max);
}
}
该博客介绍了一种算法问题,即如何在给定的循环数组中找到连续m个数的最大和。通过移动一个固定大小为m的窗口来遍历数组,不断更新最大和。提供的代码示例展示了如何实现这一过程。
4043

被折叠的 条评论
为什么被折叠?



