字节青训-小M的多任务下载器挑战、版本号比较

目录

一、小M的多任务下载器挑战

题目背景

题目内容

数据输入

数据输出

数据与约定

示例1

示例2

解题思路:

问题理解

数据结构选择

算法步骤

最终代码:

运行结果:

二、版本号比较 

问题描述

样例

示例 1:

示例 2:

示例 3:

示例 4:

 解题思路:

最终代码:

运行结果:


一、小M的多任务下载器挑战

题目背景

小M的程序设计大作业是编写一个多任务下载器,在做到计算任务并发数的时候遇到了困难。

题目内容

在一次下载中,总共包含N个任务,每个任务会在第x秒开始、并持续y秒。
小M想要知道,在一次下载中,同时最多会有多少个任务正在下载。

数据输入

第一行输入一个正整数N,代表总共有N个任务。
之后共N行,每行包含两个正整数x、y,x代表任务的开始时间,y代表任务的持续时间。

数据输出

输出包含一个整数,代表最高的任务并发数。

数据与约定

对于30%的数据,1 ≤ N ≤ 1,000,1 ≤ x, y ≤ 1,000。
对于50%的数据,1 ≤ N ≤ 1,000,000,1 ≤ x, y ≤ 1,000,000。
对于100%的数据,1 ≤ N ≤ 1,000,000,1 ≤ x, y ≤ 1,000,000,000。

示例1

输入
2
1 2
2 3

输出
2

说明
第一个任务在第一秒开始,持续两秒;第二个任务在第二秒开始,持续三秒。故在第二秒时有两个任务同时在进行,最大并发数为2。

示例2

输入
4
1 2
2 3
3 5
4 3

输出
3

说明
4个任务的时间区间分别为[1,2], [2,4], [3,7], [4,6]。
故在第4秒的时候,第2、3、4号任务正在进行。

解题思路:

问题理解

我们需要计算在一次下载中,同时最多会有多少个任务正在下载。每个任务有一个开始时间和持续时间,这意味着每个任务有一个开始时间和结束时间。

数据结构选择

为了有效地计算并发任务数,我们可以使用以下数据结构:

  1. 事件列表:记录每个任务的开始和结束时间。
  2. 时间线扫描:通过扫描时间线来计算每个时间点的并发任务数。

算法步骤

  1. 事件记录

    • 对于每个任务,记录其开始时间和结束时间。
    • 将开始时间视为“+1”事件,结束时间视为“-1”事件。
  2. 时间线扫描

    • 将所有事件(开始和结束)按时间顺序排序。
    • 遍历排序后的事件列表,维护一个计数器来记录当前并发任务数。
    • 每当遇到一个开始事件,计数器加1;每当遇到一个结束事件,计数器减1。
    • 在遍历过程中,记录计数器的最大值,即为最高的任务并发数。

最终代码:

 

#include <iostream>
#include <vector>
#include <algorithm>int solution(int n, std::vector<std::vector<int>> array) {std::vector<std::pair<int, int>> events;// 记录每个任务的开始和结束事件for (auto& task : array) {int start = task[0];int end = task[0] + task[1];events.push_back({start, 1});  // 开始事件events.push_back({end, -1});   // 结束事件}// 按时间顺序排序事件std::sort(events.begin(), events.end());int max_concurrent = 0;int current_concurrent = 0;// 遍历事件列表,计算并发任务数for (auto& event : events) {current_concurrent += event.second;max_concurrent = std::max(max_concurrent, current_concurrent);}return max_concurrent;
}int main() {// Add your test cases herestd::cout << (solution(2, {{1,2}, {2,3}}) == 2) << std::endl;std::cout << (solution(4, {{1,2}, {2,3}, {3,5}, {4,3}}) == 3) << std::endl;return 0;
}

运行结果:

 

二、版本号比较 

 

问题描述

给你两个版本号 version1 和 version2,请你比较它们。

版本号由一个或多个修订号组成,各修订号由一个 . 连接。每个修订号由多位数字组成,可能包含前导零。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0,下一个修订号下标为 1,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。

比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较忽略任何前导零后的整数值。也就是说,修订号 1 和修订号 001 相等。如果版本号没有指定某个下标处的修订号,则该修订号视为 0。例如,版本 1.0 小于版本 1.1,因为它们下标为 0 的修订号相同,而下标为 1 的修订号分别为 0 和 10 < 1

返回规则如下:

  • 如果 version1 > version2 返回 1
  • 如果 version1 < version2 返回 -1
  • 除此之外返回 0

样例

示例 1:

输入:

version1 = "0.1"  
version2 = "1.1"

输出:

-1

示例 2:

输入:

version1 = "1.0.1"  
version2 = "1"

输出:

1

示例 3:

输入:

version1 = "7.5.2.4"  
version2 = "7.5.3"

输出:

-1

示例 4:

输入:

version1 = "1.0"  
version2 = "1.0.0"

输出:

0

解释:version1 没有第三级修订号,这意味着它的第三级修订号默认为 0

 解题思路:

  1. 理解版本号的结构

    • 版本号由多个修订号组成,修订号之间用 . 分隔。
    • 每个修订号是一个整数,可能包含前导零。
  2. 比较版本号

    • 从左到右依次比较每个修订号。
    • 如果某个版本号缺少修订号,则视为 0
    • 比较修订号时,忽略前导零。
  3. 算法步骤

    • 将版本号字符串按 . 分割成修订号数组。
    • 逐个比较修订号数组中的元素。
    • 如果某个修订号数组较短,则在其后补 0 进行比较。
    • 根据比较结果返回 1-1 或 0

最终代码:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>// 辅助函数:将版本号字符串分割并转换为整数数组
std::vector<int> splitAndConvert(std::string version) {std::vector<int> result;std::stringstream ss(version);std::string token;while (std::getline(ss, token, '.')) {result.push_back(std::stoi(token));}return result;
}int solution(std::string version1, std::string version2) {// 将版本号按 `.` 分割成修订号数组std::vector<int> v1 = splitAndConvert(version1);std::vector<int> v2 = splitAndConvert(version2);// 逐个比较修订号int n = std::max(v1.size(), v2.size());for (int i = 0; i < n; ++i) {int num1 = (i < v1.size()) ? v1[i] : 0;int num2 = (i < v2.size()) ? v2[i] : 0;if (num1 > num2) return 1;if (num1 < num2) return -1;}return 0;
}int main() {// Add your test cases herestd::cout << (solution("0.1", "1.1") == -1) << std::endl;std::cout << (solution("1.0.1", "1") == 1) << std::endl;std::cout << (solution("7.5.2.4", "7.5.3") == -1) << std::endl;std::cout << (solution("1.0", "1.0.0") == 0) << std::endl;return 0;
}

运行结果:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472457.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins用户在执行scp的时候如何做免密登录

一、背景 在jenkins job中执行scp的shell命令&#xff0c;当然不希望每次输入密码&#xff0c;另外处于出于安全考虑&#xff0c;也不建议在scp命令中指定。 所以&#xff0c;我们需要对远程机器进行免密登录。 本文遇到的问题是&#xff0c;在jenkins机器上执行scp已做到了…

Prometheus监控SQL SERVER常用指标和PromQL预警

SQL Server是企业级广泛应用的数据库&#xff0c;通过简单的Prometheus exportor可以很容易地监控它。与所有数据库一样&#xff0c;SQL Server也有许多故障点&#xff0c;例如事务延迟或数据库中连接过多。本文介绍如何使用Prometheus监视SQL Server&#xff0c;包括常用的监控…

HTML5实现俄罗斯方块小游戏

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面1.3 游戏结束界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143788449 HTML5实现俄罗斯方块小游戏&#x…

从北美火到中国,大数据洞察品牌“STANLEY”的突围之路

保守直筒大头的“硬汉”外形&#xff0c;以百变颜色踩中时尚命脉&#xff0c;与各路大牌“梦幻联动”&#xff0c;不少时尚弄潮儿没能逃过其“真香”诱惑。 这就是今年以来从北美火到中国的STANLEY&#xff0c;在“巨无霸”水杯中突围出属于自己的一条路。 最近STANLEY又整活…

linux逻辑卷练习

目录 知识点&#xff1a; 常用命令 题目&#xff1a; 解题&#xff1a; 1&#xff09;分区 2&#xff09;创建物理卷 3&#xff09;创建卷组 4&#xff09;生成逻辑卷 "要带参数 -n" 5&#xff09;扩容 6&#xff09;格式化(添加文件系统) 7&#xff09;挂…

java版嘎嘎快充汽车单车充电系统源码系统jeecgboot

汽车使用云快充1.6 1.5协议&#xff0c;单车用的铁塔协议 前端uniapp、后端jeecgbootvue2

【Vitepress报错】Error: [vitepress] 8 dead link(s) found.

原因 VitePress 在编译时&#xff0c;发现 死链接(dead links) 会构建失败&#xff01;具体在哪我也找不到… 解决方案 如图第一行蓝色提示信息&#xff0c;设置 Vitepress 属性 ignoredeadlinks 为 true 可忽略报错。 .vuepress/config.js export default defineConfig(…

《Django 5 By Example》阅读笔记:p105-p164

《Django 5 By Example》学习第5天&#xff0c;p105-p164总结&#xff0c;总计60页。 一、技术总结 1.文章标签功能 Django自带django-taggit。 2.自定义template tags 3.roadmap功能 4.RSS功能 5.full-text搜索功能 这里使用的是Postgresql,使用pip install psycopg安…

awk(常用)

这个有点难 O.o 一、awk # 语法 awk 参数 模式 {动作} 文件# 第一列&#xff0c;包含p的 $1~"p" # 第一列&#xff0c;不包含p的 $1!~"p" # 开始时干嘛&#xff0c;结束时干嘛 awk BEGIN{开始时做的事}END{结束时做的事}{print $0} 文件 1、内置变量&…

数据结构—栈和队列

目录 1.栈底层结构的选择 2.栈的实现 3.栈 3.1入栈 3.2出栈 3.3栈顶删除 4.队列 4.1队列介绍 4.2队列初始化 4.3入队列 4.4队头删除 1.栈底层结构的选择 栈是一种数据结构 具有“后进先出的”的特点 现在面临的两种选择&#xff0c;一种是顺序表&#xff0c;另一种…

安装paddle

网址&#xff1a;飞桨PaddlePaddle-源于产业实践的开源深度学习平台 或者找对应python和cuda版本的paddle下载后安装&#xff1a; https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html 你想要安装paddlepaddle - gpu2.6.1.post112版本。在你提供的文件列表中&am…

【解决】Layout 下创建槽位后,执行 Image 同步槽位位置后表现错误的问题。

开发平台&#xff1a;Unity 6.0 编程语言&#xff1a;CSharp 编程平台&#xff1a;Visual Studio 2022   一、问题背景 | 开发库存系统 图1 位置同步失败问题 图2 位置正常同步效果表现 黑框 作用于 UnityEngine.UI.GridLayoutGruop&#xff0c;形成 4x6 布局&#xff0c;如…

电商系统开发:Spring Boot框架实战

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

深度神经网络DNN反向传播BP算法公式推导

深度神经网络DNN反向传播BP算法推导、δ法则 文章目录 前言一、单个神经元的内部结构二、前向传播三、反向传播总结 前言 \;\;\;\;\; 本文详细推导深度神经网络DNN反向传播BP算法中对权重w和偏置b的更新公式。通过图片和一步步的数学公式推导深刻理解反向传播BP算法&#xff0c…

借助Excel实现Word表格快速排序

实例需求&#xff1a;Word中的表格如下图所示&#xff0c;为了强化记忆&#xff0c;希望能够将表格内容随机排序&#xff0c;表格第一列仍然按照顺序编号&#xff0c;即编号不跟随表格行内容调整。 乱序之后的效果如下图所示&#xff08;每次运行代码的结果都不一定相同&#x…

HarmonyOS 开发环境搭建

HarmonyOS&#xff08;鸿蒙操作系统&#xff09;作为一种面向全场景多设备的智能操作系统&#xff0c;正逐渐在市场上崭露头角。为了进入HarmonyOS生态&#xff0c;开发者需要搭建一个高效的开发环境。本文将详细介绍如何搭建HarmonyOS开发环境&#xff0c;特别是如何安装和配置…

Fish Agent V0.13B:Fish Audio的语音处理新突破,AI语音助手的未来已来!

近日&#xff0c;Fish Audio公司发布了一款全新的语音处理模型——Fish Agent V0.13B&#xff0c;这款模型以其高效、精确的语音生成和处理能力&#xff0c;尤其是在模拟或克隆不同声音方面的表现&#xff0c;引起了广泛关注。这不仅意味着我们在拥有一个声音自然、反应迅速的A…

Shell基础2

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团…

系统架构师考试18天极限备考复盘(2024年11月)

前言 写下这篇复盘笔记的时候还没有出成绩。泽崽目前是在读研究生&#xff0c;在经过 大概2周多个全日 的极限备考之后&#xff0c;于11月10日参加了软考的系统架构师考试&#xff08;高级&#xff09;。目前12月下旬才会出成绩&#xff0c;对于“基础知识-案例分析-论文”的估…