求一个环内连续m个数的最大和
来源:互联网 发布:中影人 知乎 编辑:程序博客网 时间:2024/05/29 02:53
题目描述:
有n个小朋友,围成一个圈,玩丢手绢的游戏。现输入一个数组表示每个小朋友被丢中的次数,同时输入一个整数m(1<=m<=n),求出连续m个小朋友被丢中次数的和的最大值。
示例:
input:5//数组大小n12345//数组的个元素值3//连续m个小朋友output:12
思路:
思路还是比较简单的:假定输入数组为arr,连续m个小朋友1. 求出一个基本值sum,maxfor i between 0:(m-1) in arr sum += arr[i];max = sum;2. len = arr.length.sum1:表示从当前位置i开始,连续m个数值的和sum1 = arr[i]+arr[i+1]+...+arr[i+m-1];那么,从下一个位置i+1开始,连续m个数值的和sum2,sum2 = arr[i+1]+arr[i+1]+...+arr[i+m];sum2 = sum1 - arr[i] + arr[i+m];为了避免每次迭代i都去判断if(i >= len),然后再取模,这里的循环直到i = len - m为止,即叠加的最后一个元素为arr[len - 1].这就都不用判断if(i >= len)。for i between m:(len - m) in arr sum -= arr[i-1]; sum += arr[m]; if(sum > max) max = sum;3. j = 0, for i between (len - m + 1): (len -1) in arr sum -= arr[i - 1]; sum += arr[j++]; if(sum > max) max = sum;
根据上述分析,写出代码如下:
import java.util.Scanner;/** * @author Mengjun Li * @create 2017/10/14 * @since 1.0.0 */public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int i = 0; int[] num = new int[n]; while (i < n) { num[i++] = sc.nextInt(); } int m = sc.nextInt(); System.out.println(solve(num, m)); } 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; }}
输入输出:
input:
5123453
output:
12
阅读全文
0 0
- 求一个环内连续m个数的最大和
- 求连续K个数的和最大
- HDU 1024 Max Sum Plus Plus求前n个数中的若干个数分为连续的m段的最大和值(解析)
- 一个数组中只有0和1,求0和1个数相等的最大连续子序列?
- 动态规划求一个数组的连续最大和
- 求一个数组中连续子数组的最大和
- 求一个数字数组里的最大连续数字的个数
- 求一个序列的最大连续长度
- hdu 1024 DP 求n个数m个不交叉子段的最大和
- 求最大连续和
- 给你N个数,让你求一个连续数串的平均值最大,连续数串的个数不得低于F个
- 【codeforces 722C】【逆向思维 离线+并查集】C. Destroying Array 【给你n个数,每次摧毁一个,求每摧毁一个的最大连续和(被摧毁的点的两边不连续)】
- 求连续子序列的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- Java的内置安全模式-"沙箱"特性
- 【冒泡排序】
- Centos安装openssl
- find_package与CMake如何查找链接库详解
- 43-函数的意义
- 求一个环内连续m个数的最大和
- 忘了账号——如何查看本地mysql账号
- 34. Search for a Range
- initialize_all_variables()报错
- URLConnection分析
- 课后作业1 书本32页 两题
- cnn学习笔记
- Rhyme/Linux 权限管理 chattr文件系统属性
- 【struts2】五大核心jar包 和 作用