求最小连续和(洛谷P1614题题解,Java语言描述)

题目要求

P1614题目链接
在这里插入图片描述
在这里插入图片描述

分析

既然是要求最小连续和,那就需要存储连续的M个数据,还需要保存最小的和以及当前的和。

先开循环,把M和数据读入M长度数组中,保存好数据,完成求和。

接下来就是后续处理了。
试想:如果我们不存储每个数,那后续就没法进行了……
所以每个数都要存储,但不能每次都全部折腾一遍,那怎么办呢?
就嘿嘿嘿,用类似循环队列的数组吧,只不过这个队列必然是满的,每次都是换下去一个而已。
怎么实现呢?其实很简单,就需要一个int类型的指针,标记最早进入数组的一个数据的索引就可以啦。
变更pointer的代码是pointer = (pointer+1)%range;

过程中的操作,多仔细一些就好啦。

AC代码(Java语言描述)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt(), range = scanner.nextInt(), sum = 0, pointer = 0, tempSum;
        int[] array = new int[range];
        for (int i = 0; i < range; i++) {
            int temp = scanner.nextInt();
            sum += temp;
            array[i] = temp;
        }
        tempSum = sum;
        for (int i = range; i < num; i++) {
            int temp = scanner.nextInt();
            tempSum = tempSum - array[pointer] + temp;
            array[pointer] = temp;
            pointer = (pointer+1)%range;
            if (tempSum < sum) {
                sum = tempSum;
            }
        }
        scanner.close();
        System.out.println(sum);
    }
}
发布了399 篇原创文章 · 获赞 657 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104102513
今日推荐