华为OD机考算法题:区块链文件转储系统

这篇具有很好参考价值的文章主要介绍了华为OD机考算法题:区块链文件转储系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

题目部分

解读与分析

代码实现


题目部分

题目 区块链文件转储系统
难度
题目说明 区块链底层存储是一个链式文件系统,由顺序的N个文件组成,每个文件的大小不一,依次为F1、F2……Fn。随着时间的推移,所占存储会越来越大。
云平台考虑将区块链按文件转储到廉价的SATA盘,只有连续的区块链文件才能转储到SATA盘上,且转的文件之和不能超过SATA盘的容量。
假设每块SATA盘容量为 M,求能转储的最大连续文件之和。
输入描述 第一行为 SATA 盘的容量 M, 1000 <= M <= 1000000。
第二行为区块链文件大小序列 F1、F2、F3 …… Fn。其中 1 <= n <= 100000,1 <= Fi <= 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 ]。

解读与分析

题目解读

磁盘转存,找出连续的文件,使文件的大小之和不高于转寸磁盘的大小,求最大的文件大小之和。翻译一下,就是:从一组连续的正整数中,找出连续的数字,使连续数字之和不超过指定数字。在符合条件的情况下,连续数字之和最大是多少。

分析与思路

此题与《华为OD机考算法题:补种未成活胡杨》类似,都是以 0 为左边界,找到一个右边界,使左边界和右边界之间的所有数字符合其条件,然后依次向右移动左边界、右边界,找到下一个符合条件的连续块,逐一比较每个连续块的情况,最终输出符合条件连续块中最优(最优的条件取决于题目要求)的那个。

此题的时间复杂度为 O(n),空间复杂度为 O(1)。


代码实现

Java代码

import java.util.Scanner;

/**
 * 区块链文件转储系统
 * 
 * @since 2023.09.22
 * @version 0.1
 * @author Frank
 *
 */
public class StorageTransfer {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			String input = sc.nextLine();
			int limit = Integer.parseInt(input);
			input = sc.nextLine();
			String[] strNumbers = input.split(" ");
			processStorageTransfer(limit, strNumbers);
		}
	}

	private static void processStorageTransfer(int limit, String strNumbers[]) {
		int[] numbers = new int[ strNumbers.length ];
		for( int i = 0; i < strNumbers.length; i ++ )
		{
			numbers[i] = Integer.parseInt( strNumbers[i] );
		}
		int left = 0;
		int right = 1;
		int tmpMax = numbers[0];
		int maxSize = 0;
		while( right <= numbers.length )
		{
			while( ( right < numbers.length ) && ( tmpMax + numbers[right] <= limit ) )
			{
				tmpMax += numbers[right]; 
				right ++;
			}
			if( tmpMax > maxSize )
			{
				maxSize = tmpMax;
			}
			if( maxSize == limit )
			{
				System.out.println( maxSize );
				return;
			}
			if( right >= numbers.length )
			{
				break;
			}
			do {
				tmpMax -= numbers[left];
				left ++;
			}while( left < numbers.length &&  tmpMax > limit);
			
		}
		
		System.out.println( maxSize );
	}
}

JavaScript代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {
    while (line = await readline()) {
        var limit = parseInt(line);

        line = await readline();
        var strNumbers = line.split(" ");
        processStorageTransfer(limit, strNumbers);
    }
}();

function processStorageTransfer(limit, strNumbers) {
    var numbers = new Array();
    for (var i = 0; i < strNumbers.length; i++) {
        numbers[i] = parseInt(strNumbers[i]);
    }
    var left = 0;
    var right = 1;
    var tmpMax = numbers[0];
    var maxSize = 0;
    while (right <= numbers.length) {
        while ((right < numbers.length) && (tmpMax + numbers[right] <= limit)) {
            tmpMax += numbers[right];
            right++;
        }
        if (tmpMax > maxSize) {
            maxSize = tmpMax;
        }
        if (maxSize == limit) {
            console.log(maxSize);
            return;
        }
        if (right >= numbers.length) {
            break;
        }
        do {
            tmpMax -= numbers[left];
            left++;
        } while (left < numbers.length && tmpMax > limit);

    }

    console.log(maxSize);
}

(完)文章来源地址https://www.toymoban.com/news/detail-714323.html

到了这里,关于华为OD机考算法题:区块链文件转储系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【100%通过率】华为OD机试真题 Java 实现【最大连续文件之和 / 区块链文件转储系统 】

             所有题目均有五种语言实现。 C实现目录 、 C++ 实现目录 、 Python实现目录 、 Java实现目录 、 JavaScript实现目录

    2024年02月03日
    浏览(59)
  • 华为OD机试真题- 区块链文件转储系统【2023Q2】【JAVA、Python、C++】

    题目描述: 区块链底层存储是一个链式文件系统,由顺序的N个文件组成,每个文件的大小不一,依次为F1,F2...Fn。随着时间的推移,所占存储会越来越大。 云平台考虑将区块链按文件转储到廉价的SATA盘,只有连续的区块链文件才能转储到SATA盘上,且转储的文件之和不能超过

    2024年02月10日
    浏览(41)
  • 【华为OD统一考试A卷 | 100分】最大连续文件之和 / 区块链文件转储系统(C++ Java JavaScript Python )

    华为OD统一考试A卷+B卷 新题库说明 2023年5月份,华为官方已经将的 2022/0223Q(1/2/3/4)统一修改为OD统一考试(A卷)和OD统一考试(B卷)。 你收到的链接上面会标注A卷还是B卷。请注意:根据反馈,目前大部分收到的都是B卷。但是仍有概率抽到A卷。 A卷对应2023的新题库(2022Q4 2

    2024年02月13日
    浏览(47)
  • 【华为OD机试真题】区块链文件转储系统(java&python)100%通过率 超详细代码注释 代码解读

    【华为OD机试真题 20222023】真题目录 @点这里@ 【华为OD机试真题】信号发射和接收 试读 @点这里@ 【华为OD机试真题】租车骑绿道 试读 @点这里@ 知识点栈链表单调栈Q滑窗 时间限制:2s空间限制:256MB限定语言:不限 区块链底层存储是一个链式文件系统,由顺序的N个文件组成,

    2024年02月04日
    浏览(40)
  • 【2023Q2首发OD机试考生抽中题】区块链文件转储系统,用 JS 编码,速通

    华为 od 2023 | 什么是华为 od,od 薪资待遇,od 机试题清单 华为 OD 机试真题大全,用 Python 解华为机试题 | 机试宝典 【华为 OD 机试】全流程解析+经验分享,题型分享,防作弊指南 华为 od 机试,独家整理 已参加机试人员的实战技巧 区块链底层存储是一个链式文件系统,由顺序的

    2024年02月09日
    浏览(70)
  • 【2023Q2首发OD机试考生抽中题】区块链文件转储系统,用 C 编码,速通

    华为 od 2023 | 什么是华为 od,od 薪资待遇,od 机试题清单 华为 OD 机试真题大全,用 Python 解华为机试题 | 机试宝典 【华为 OD 机试】全流程解析+经验分享,题型分享,防作弊指南 华为 od 机试,独家整理 已参加机试人员的实战技巧 区块链底层存储是一个链式文件系统,由顺序的

    2024年02月09日
    浏览(44)
  • 【2023Q2首发OD机试考生抽中题】区块链文件转储系统,用 C++ 编码,速通

    华为 od 2023 | 什么是华为 od,od 薪资待遇,od 机试题清单 华为 OD 机试真题大全,用 Python 解华为机试题 | 机试宝典 【华为 OD 机试】全流程解析+经验分享,题型分享,防作弊指南 华为 od 机试,独家整理 已参加机试人员的实战技巧 区块链底层存储是一个链式文件系统,由顺序的

    2024年02月07日
    浏览(35)
  • 华为OD机考算法题:最远足迹

    题目部分 解读与分析 代码实现 题目 最远足迹 难度 易 题目说明 某探险队负责对地下洞穴进行探险。 探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程

    2024年02月09日
    浏览(34)
  • 华为OD机考算法题:分奖金

    题目 分奖金 难度 难 题目说明 公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么,前面的员工就可以获得

    2024年02月09日
    浏览(39)
  • 华为OD机考算法题:TLV解码

    题目部分 解析与思路 代码实现 题目 TLV编码 难度 易 题目说明 TLV编码是按 [Tag Length Value] 格式进行编码的,一段码流中的信元用 Tag 标识,Tag 在码流中唯一不重复,Length 表示信元Value的长度,Value 表示信元的值。 码流以某信元的 Tag 开头,Tag 固定占一个字节,Length 固定占两

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包