蓝桥杯 ADV_303 数组求和

简介: 蓝桥杯 ADV_303 数组求和

资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

  输入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。

分析如下:

首先根据题意,我们可以用一个整形的array数组来存储输入的一串数字,再另外构造一个函数,在主函数中通过调用外部函数来解决这个问题。

solve(int[]num , int m)函数里面就先判断数组元素是否为空或者数组长度是否为空,如果为空那就直接返回0,如果不为空,那么我们就继续下面·的代码。定义一个求和变量sum来求数组中连续m个元素的和。然后把这个sum的值赋值给max变量,先求没有围成一圈(也就是直接直接输入的一条数据n个数字连续m个数和的最大值,然后再在num[len - m +1]之后的m个数字必然会需要重新回到起点,这个时候我们就需要重新写一个for循环来把sum里面的num[len - m]个数减掉,同时加上num[0]这样子就可以得到想要的结果了,如果max小于这个数那就将这个数赋值给max,否则就直接返回max。

代码如下:

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int m = scanner.nextInt();
    int []array = new int[n];
    for (int i = 0; i < n; i++) {
      array[i] = scanner.nextInt();
    }
    System.out.println(solve(array, m));
    scanner.close();
  }
  public static int solve(int[] num, int m) {
        if (num == null)
            return 0;
        int len = num.length;
        if (len == 0)
            return 0;
        int sum = 0, max = 0;
        for (int i = 0; i < m; i++) {
            sum += num[i];
        }
        max = sum;
        for (int i = 1; i <= len - m; i++) {
            sum -= num[i - 1];
            sum += num[i + m-1];
            if (max < sum)
                max = sum;
        }
        for (int i = len - m + 1, j = 0; i < len; i++, j++) {
            sum = sum - num[i - 1] + num[j];
            if (max < sum)
                max = sum;
        }
        return max;
  }
}


相关文章
|
6月前
|
机器学习/深度学习 Java BI
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-970 数组移动
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-970 数组移动
55 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-462 求和
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-462 求和
40 0
|
6月前
|
算法 Java Serverless
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-444 算法训练 求和问题
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-444 算法训练 求和问题
56 1
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-49 算法训练 寻找数组中最大值
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-49 算法训练 寻找数组中最大值
52 0
|
5月前
蓝桥杯动态规划-第五弹 最大子数组和 买卖股票最佳时机IV 第N个泰波那契数 环形数组
蓝桥杯动态规划-第五弹 最大子数组和 买卖股票最佳时机IV 第N个泰波那契数 环形数组
|
5月前
|
Java
2022蓝桥杯大赛软件类省赛Java大学B组G题 数组切分
2022蓝桥杯大赛软件类省赛Java大学B组G题 数组切分
29 0
|
算法 Java
2015 蓝桥杯省赛部分题整理(九数组分数,牌型种数,串逐位和,循环节长度,打印菱形)
2015 蓝桥杯省赛部分题整理(九数组分数,牌型种数,串逐位和,循环节长度,打印菱形)
92 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-493 合并排序数组
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-493 合并排序数组
46 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-79 删除数组零元素
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-79 删除数组零元素
37 0
|
6月前
|
Java 数据处理 C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)- 基础练习 序列求和
第十四届蓝桥杯集训——练习解题阶段(无序阶段)- 基础练习 序列求和
38 0