news 2026/6/10 17:10:54

(新卷,200分)- 区块链文件转储系统(Java JS Python)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(新卷,200分)- 区块链文件转储系统(Java JS Python)

(新卷,200分)- 区块链文件转储系统(Java & JS & Python)

题目描述

区块链底层存储是一个链式文件系统,由顺序的N个文件组成,每个文件的大小不一,依次为F1,F2,...,Fn。随着时间的推移,所占存储会越来越大。

云平台考虑将区块链按文件转储到廉价的SATA盘,只有连续的区块链文件才能转储到SATA盘上,且转储的文件之和不能超过SATA盘的容量。

假设每块SATA盘容量为M,求能转储的最大连续文件之和。

输入描述

第一行为SATA盘容量M,1000 ≤ M ≤ 1000000

第二行为区块链文件大小序列F1,F2,...,Fn。其中 1 ≤ n ≤ 100000,1 ≤ Fi ≤ 500

输出描述

求能转储的最大连续文件大小之和

用例
输入1000
100 300 500 400 400 150 100
输出950
说明最大序列和为950,序列为[400,400,150]
输入1000
100 500 400 150 500 100
输出1000
说明最大序列和为1000,序列为[100,500,400]
题目解析

由于本题需要求解最大连续文件大小之和,因此可以考虑使用双指针+滑动窗口来解题。

本题的滑动窗口的左边界l,右边界r的运动逻辑如下:

  • 如果滑动窗口内部和 < m,则r++
  • 如果滑动窗口内部和 > m,则l++
  • 如果滑动窗口内部和 = m,则已得到最大值,直接返回m即可。

在计算滑动窗口内部和的过程中,如果r++,则说明内部和可能会增大产生最大值,因此我们需要在r++时,判断并保留最大值。

JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines = []; rl.on("line", (line) => { lines.push(line); if (lines.length === 2) { const m = lines[0] - 0; const F = lines[1].split(" ").map(Number); console.log(getResult(m, F)); lines.length = 0; } }); function getResult(m, F) { let l = 0, r = 0; let n = F.length; let sum = 0; let max = 0; while (r < n) { // 尝试右指针右移一下的新和(注意初始时右指针右移后指向0) const newSum = sum + F[r]; // 如果新和超过了m,即SATA盘容量,则右指针不能右移,并且还需要左指针右移来减少旧和 if (newSum > m) { sum -= F[l++]; // 左指针右移只会减少旧和,因此不会产生最大值 } // 如果新和小于m,则当前尝试的右指针右移可行,因此 sum += F[r],并且我们下一步还可以继续尝试让右指针右移,即r++ else if (newSum < m) { sum += F[r++]; max = Math.max(sum, max); // 右指针右移时会增加旧和,因此可能会产生最大值 } // 如果新和等于m,那么说明已经找到了一个容量和SATA盘相同的连续文件大小,即此时已经是最大值了,可以直接返回 else { return m; } } return max; }
Java算法源码
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = Integer.parseInt(sc.nextLine()); Integer[] f = Arrays.stream(sc.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new); System.out.println(getResult(m, f)); } public static int getResult(int m, Integer[] f) { int l = 0, r = 0; int sum = 0, max = 0; int n = f.length; while (r < n) { // 尝试右指针右移一下的新和(注意初始时右指针右移后指向0) int newSum = sum + f[r]; // 如果新和超过了m,即SATA盘容量,则右指针不能右移,并且还需要左指针右移来减少旧和 if (newSum > m) { sum -= f[l++]; // 左指针右移只会减少旧和,因此不会产生最大值 } // 如果新和小于m,则当前尝试的右指针右移可行,因此 sum += F[r],并且我们下一步还可以继续尝试让右指针右移,即r++ else if (newSum < m) { sum += f[r++]; max = Math.max(sum, max); // 右指针右移时会增加旧和,因此可能会产生最大值 } // 如果新和等于m,那么说明已经找到了一个容量和SATA盘相同的连续文件大小,即此时已经是最大值了,可以直接返回 else { return m; } } return max; } }
Python算法源码
m = int(input()) f = list(map(int, input().split())) def getResult(m, f): l = 0 r = 0 n = len(f) sum = 0 maxV = 0 while r < n: # 尝试右指针右移一下的新和(注意初始时右指针右移后指向0) newSum = sum + f[r] # 如果新和超过了m,即SATA盘容量,则右指针不能右移,并且还需要左指针右移来减少旧和 if newSum > m: # 左指针右移只会减少旧和,因此不会产生最大值 sum -= f[l] l += 1 # 如果新和小于m,则当前尝试的右指针右移可行,因此 sum += F[r],并且我们下一步还可以继续尝试让右指针右移,即r++ elif newSum < m: sum += f[r] r += 1 maxV = max(sum, maxV) # 右指针右移时会增加旧和,因此可能会产生最大值 # 如果新和等于m,那么说明已经找到了一个容量和SATA盘相同的连续文件大小,即此时已经是最大值了,可以直接返回 else: return m return maxV print(getResult(m, f))
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 11:37:01

(新卷,200分)- 去除多余空格(Java JS Python)

(新卷,200分)- 去除多余空格&#xff08;Java & JS & Python&#xff09;题目描述去除文本多余空格&#xff0c;但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标&#xff0c;去除多余空格后刷新关键词的起始和结束下标。条件约束&#xff1a; 1&#xf…

作者头像 李华
网站建设 2026/6/10 11:41:43

(新卷,100分)- 生日礼物(Java JS Python C)

(新卷,100分)- 生日礼物&#xff08;Java & JS & Python & C&#xff09; 题目描述 小牛的孩子生日快要到了&#xff0c;他打算给孩子买蛋糕和小礼物&#xff0c;蛋糕和小礼物各买一个&#xff0c;他的预算不超过x元。蛋糕cake和小礼物gift都有多种价位的可供选择…

作者头像 李华
网站建设 2026/6/10 1:59:28

轻量化5G实验室搭建方案:中小高校的低成本路径

人才缺口持续扩大&#xff0c;搭建专业实验室成了高校通信、物联网专业的“刚需”&#xff01;但传统方案动辄百万投入、占地超百平&#xff0c;还得专人运维&#xff0c;预算有限的中小高校根本扛不住。别慌&#xff0c;不用堆高端设备&#xff0c;不用砸巨额资金&#xff0c;…

作者头像 李华
网站建设 2026/6/10 14:52:06

计算机Java毕设实战-基于Spring Boot的保险销售员人力资源管理系统基于springboot的寿险公司人力资源管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 9:03:43

具备DI、DO、AI、AO四类IO信号的采集/输出功能以及串口、网口的通信功能,主要用于对综合测试平台及样机的功能测试提供支撑。

核控卡件综合测试平台1&#xff09;系统简介核控卡件综合测试平台具备DI、DO、AI、AO四类IO信号的采集/输出功能以及串口、网口的通信功能&#xff0c;主要用于对综合测试平台及样机的功能测试提供支撑。综合测试平台集成测试设备的对外总线接口&#xff0c;主要包括RS422、以太…

作者头像 李华
网站建设 2026/6/10 9:05:15

道路抛洒物数据集4521张VOC+YOLO格式

道路抛洒物数据集4521张VOCYOLO格式数据集格式&#xff1a;VOC格式YOLO格式压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件JPEGImages文件夹中jpg图片总计&#xff1a;4521Annotations文件夹中xml文件总计&#xff1a;4521labels文件夹中txt文件总计&…

作者头像 李华