20240425 每日一题:2739. 总行驶距离

题目简介

卡车有两个油箱。给你两个整数,mainTank 表示主油箱中的燃料(以升为单位),additionalTank 表示副油箱中的燃料(以升为单位)。

该卡车每耗费 1 升燃料都可以行驶 10 km。每当主油箱使用了 5 升燃料时,如果副油箱至少有 1 升燃料,则会将 1 升燃料从副油箱转移到主油箱。

返回卡车可以行驶的最大距离。

注意:从副油箱向主油箱注入燃料不是连续行为。这一事件会在每消耗 5 升燃料时突然且立即发生。

算法步骤

  1. 初始化最大距离:
    • 方法开始时,定义一个变量 max 初始化为 0,用来记录总行驶距离。
  2. 主循环:
    • 使用while循环检查主油箱的油量是否足够行驶至少5单位距离(假设每5单位油可以行驶50公里)。
    • 在每次循环中,主油箱的油量减少5单位,同时总行驶距离增加50公里。
  3. 检查额外油箱:
    • 在每次从主油箱消耗油量之后,检查额外油箱是否还有油。如果有,从额外油箱中取出一单位油加到主油箱中,并减少额外油箱的油量。
  4. 计算剩余油量带来的额外距离:
    • 当主油箱的油不足以再行驶50公里时,循环结束。此时主油箱可能还有少量油,每单位油可以行驶10公里。
    • 最后,将剩余油量乘以10加到总行驶距离上。
  5. 返回结果:
    • 方法返回计算得出的最大行驶距离。

示例

假设mainTank为16单位,additionalTank为3单位:

  • 初始时,mainTank = 16, additionalTank = 3。
  • 循环第一次后,mainTank = 12 (16 - 5 + 1,额外油箱补充了1单位),additionalTank = 2,max = 50。
  • 循环第二次后,mainTank = 8 (12 - 5 + 1),additionalTank = 1,max = 100。
  • 循环第三次后,mainTank = 4 (8 - 5 + 1),additionalTank = 0,max = 150。
  • 最后,剩余油量为4单位,行驶距离增加40公里(4 * 10),总距离变为190公里。

代码实现

class Solution {public int distanceTraveled(int mainTank, int additionalTank) {int max = 0;while(mainTank >= 5) {mainTank -= 5;max += 50;if(additionalTank > 0) {additionalTank--;mainTank++;}}max += mainTank * 10;return max;}
}

复杂度

时间复杂度:

  • 循环条件:每次循环中,mainTank减少5单位油,但如果有额外的油 (additionalTank > 0),则mainTank增加1单位。因此,对于每次循环,mainTank的净减少量为4单位(假设additionalTank始终有油)。
  • 循环次数:如果mainTank开始时为M,那么循环大约会执行M / 4次(当额外油箱有足够的油时)。如果没有额外的油,循环将执行M / 5次。

时间复杂度主要依赖于mainTank的初始值,可表示为O(M/4)或O(M/5),这两者在大O表示法中通常简化为 O ( M ) O(M) O(M),其中M是mainTank的初始值。

空间复杂度:

  • 变量存储:我们使用了几个基本类型的变量(max, mainTank, additionalTank),这些都是固定的存储需求。
  • 没有使用额外的数据结构:该方法中没有使用数组、列表或其他任何动态数据结构来存储额外的信息。

空间复杂度为 O ( 1 ) O(1) O(1),即常数空间复杂度,因为它不依赖于输入大小,仅使用了固定数量的额外空间。

总结

通过模拟主油箱和额外油箱的油量消耗过程来计算汽车能够行驶的最大距离。代码中的逻辑确保在消耗尽可能多的油的同时,尽可能远地行驶。此外,通过每次从额外油箱中补充油量,有效利用了所有可用资源,从而达到最大行驶距离。

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

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

相关文章

学习Docker笔记

在23号刚刚学完新版本的docker还想说回去继续学习老版本的springcloud课程里面的docker 结果一看黑马首页新版本课程出了,绷不住了。以下是我学习新版本docker的笔记,记录了我学习过程遇到的各种bug和解决,也参考了黑马老师的笔记&#xff1a…

TDengine高可用探讨

提到数据库,不可避免的要考虑高可用HA(High Availability)。但是很多人对高可用的理解并不是很透彻。 要搞清高可用需要回答以下几个问题: 什么是高可用?为什么需要高可用?高可用需要达到什么样的目标&am…

Unity射线实现碰撞检测(不需要rigbody组件)

使用physic.CapsulCast(); 前面3个参数生成一个胶囊体, 向着发射方向,发射出一串的胶囊(没有最大距离) 有最大距离,可以节约性能开销。 physic.CapsulCast(&#xff0…

记录一次使用springboot 3 用gradle脚本的踩坑记录

问题1 . 下载插件或者gradle以及gradle plus有问题 报错:Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.3.0-RC 解决方法:使用如下配置 settings.gradle的 pluginManagement下 repositories是插件的依赖或者插件的下载地址…

easypoi 导出增加自增序列

要求:使用easypoi导出Excel的时候,要求增加”序号“列,从1开始增加。这列与业务数据无关,只是展示用,便于定位。如下图所示 实现方式:Java对象新增一列,注意name "序号", format &…

测试工程师常见面试题及答案

什么是软件测试生命周期(STLC)? STLC是一个特定的阶段序列,用于测试软件或应用程序。它包括以下阶段: 需求分析报告计划测试设计测试环境设置测试执行测试闭环或评估 解释黑盒测试和白盒测试的区别 黑盒测试是一种测试方法&#…

Linux-缓冲区(简单理解)

1. 缓冲区是什么 缓冲区就是一段内存空间。 2. 为什么要有缓冲区 IO写入有两种: 写透模式(WT) 成本高,效率低写回模式(WB) 成本低,效率高 写透模式:每次的文件写入都要立即刷新…

【006期】用Processing写一个根据音乐变化的黑白格游戏

黑白格游戏 简述准备工作游戏设计实现代码注意事项优化二次优化 简述 为了创建一个简单的根据音乐变化的黑白格游戏,我们将利用Processing的简洁性和直观操作来实现。游戏的核心思想是:屏幕上呈现多个黑白格,随着音乐的播放,格子…

使用ClickHouse和Terraform进行CI/CD

本文字数:11047;估计阅读时间:28 分钟 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 简介 在 ClickHouse,我们致力于以 API 为先的开发方式来构建 ClickHouse Cloud。用户通过用户界面…

arm64-v8a和armeabi-v7a分别是什么?它们之间有什么区别

2024年4月22日,周一上午 arm64-v8a 和 armeabi-v7a 都是针对不同的 ARM 处理器架构的编译版本,它们之间的主要区别在于处理器架构和指令集。 arm64-v8a: arm64-v8a 是针对 ARMv8 架构的 64 位处理器的编译版本。ARMv8 架构引入了 64 位指令集…

如何快速学习盲打键盘的指法

学习盲打键盘的指法需要一定的时间和练习,但是以下几个方法可以帮助你加快学习的速度: 掌握正确的手位:了解标准的键盘布局以及手指应该放置的位置是学习盲打的第一步。在QWERTY键盘上,你的左手应该放在ASDF键上,右手应…

人工智能入门(一):基于Pytorch的手写数字识别模型

前言: 因为还在上学,时间不太够用,很多内容写到后面心有余力不足,未来有时间我会慢慢补充。人工智能的知识涉猎范围广又杂乱无章,啃书或上课学到的知识往往很早就过时了或者离实际的项目无关。所以,我很希…

VS调试、debug和release、栈区底层简单介绍、const 修饰指针变量介绍

文章目录 前言一、调试二、debug和release三、调试需要多用,多熟悉四、栈区底层简单介绍五、优秀的代码:常见的coding技巧: 六、const 修饰指针变量1. const 出现在 * 左边2. const 出现在 * 右边 七、strcpy函数的仿写1.版本12. 版本23. 版本34. 版本4 …

Corner case 数据处理方法

背景 特斯拉的纯视觉处理方法,在处理corner case的过程中,面对着数据量少,而且难以采集的问题。为了提升模型的数据量,通过一定的数据处理方法进行corner case的数据生成,不失为一种有效的办法。 "Corner case&…

Andorid进程间通信之 UNIX SOCKET

1,什么是UNIX SOCKET UNIX SOCKET,域套接字,UNIX SOCKET可用于同一台设备进程间通信,它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序列号应答等,只需要将数据从一个进程复制到另一个进程&…

高精度加法及乘法

目录 字符串的高精度加法 为什么需要高精度加法? 怎么进行高精度加法? 链表的高精度加法 翻转链表(带虚拟头节点) 字符串的高精度乘法 字符串的高精度加法 大数加法_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.co…

linux下查看前10最耗内存的进程

lunux查找占用内存前10的进程 1、使用Top命令查询进程 输入 top 命令,然后按下大写M按照内存MEM排序,按下大写P按照CPU排序。 2、查询占用CPU最高的前10个进程 ps aux|head -1;ps aux|grep -v PID|sort -rn -k 3|head 3、查询占用内存最大的前10个进程…

2024年度西安市创新联合体备案申报条件时间要求须知

一、申报条件 组建市级创新联合体需具备牵头单位、成员单位、组建协议、首席科学家等四个条件。 (一)牵头单位 1.牵头单位应为在西安市注册登记的省市产业链龙头骨干企业,重点支持市级重点产业链“链主”企业; 2.牵头单位一般为1家。 (二)成员单位 1.成员单位…

excel 按照姓名日期年月分组求和

excel 需要按照 姓名 日期的年份进行金额求和统计,采用sumifs 进行统计 注意:sumifs 不支持 合并列拆分计算,合并列只会计算一个值 表格数据大概如下:(sheet) ABC姓名日期金额A2023/01/01500A2023/01/151500B2023/01/01200B202…

python 调试 c++源码

1. gdb常用调试命令概览和说明 2. 编译c库设置Debug模式 cmake设置debug 在CMake中设置debug模式通常意味着启用调试信息和优化。以下是一个简单的CMakeLists.txt文件示例,展示了如何设置项目以便在Debug模式下构建: cmake_minimum_required(VERSION 3…