区块链底层存储是一个链式文件系统,由顺序的N个文件组成,每个文件的大小不一,依次为F1.F2…Fn。随着时间的推移,所占存储会越来越大。
云平台考虑将区块链按文件转储到廉价的SATA盘,只有连续的区块链文件才能转储到SATA盘上,且转的文件之和不能超过SATA盘的容量。
假设每块SATA盘容量为M,求能转储的最大连续文件之和。
输入描述
第一行为SATA盘容量M,1000 <= M <= 1000000
第二行为区块链文件大小序列F1,F2,…,Fn。其中 1<= n <=100000,1<= Fis <= 500
输出描述
求能转储的最大连续文件大小之和
示例1:
输入
1000
100 300 500 400 400 150 100
输出
950
说明
最大序列和为950,序列为[400,400,150]
示例2:
输入:
1000
100 500 400 150 500 100
输出:
1000
说明:
最大序列和为1000,序列为[100,500,400]
Java 代码
import java.util.Scanner;import java.util.*;import java.util.stream.Collectors;import java.math.BigInteger;import java.util.stream.Stream; class Main {public static void main(String[] args) { Scanner in = new Scanner(System.in); int M =in.nextInt(); in.nextLine(); Integer[] F = Arrays.stream(in.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new); int left = 0, right = 0; int window_sum = 0; int window_max = 0; while (right M) { window_sum -= F[left]; left += 1; } else if (temp < M) { window_sum += F[right]; window_max = Math.max(window_sum, window_max); right += 1; } else { System.out.println(M); return; } } System.out.println(window_max);} }
Python代码
import functoolsimport sysfrom collections import Counter, defaultdictimport copyfrom itertools import permutationsimport reimport mathimport sys #处理输入M = int(input()) F = [int(x) for x in input().split(" ")] # 窗口左右边界left = 0right = 0#窗口和window_sum = 0#最大窗口和window_max = 0 find_M_flag = Falsewhile (right M): window_sum -= F[left] left += 1 # 窗口内总和小了,右边界+1,sum加上右边界 elif (temp < M): window_sum += F[right] window_max = max(window_sum, window_max) right += 1 # 窗口内总和==M,直接return else: print(M) find_M_flag = True break if not find_M_flag: print(window_max)
JS代码
function main(M, F_str) { let F = F_str.split(" ").map(Number) // 窗口左右边界 let left = 0 let right = 0 //窗口和 let window_sum = 0 //最大窗口和 let window_max = 0 while (right M){ window_sum -= F[left] left += 1 } // 窗口内总和小了,右边界+1,sum加上右边界 else if (temp < M){ window_sum += F[right] window_max = Math.max(window_sum, window_max) right += 1 } // 窗口内总和==M,直接return else{ console.log(M) return } } console.log(window_max);}