当前位置: 首页 > news >正文

力扣题解1870

这道题是一个典型的算法题,涉及计算在限制的时间内列车速度的最小值。这是一个优化问题,通常需要使用二分查找来求解。

题目描述(中等)

准时到达的列车最小时速
给你一个浮点数 hour ,表示你到达办公室可用的总通勤时间。要到达办公室,你必须按给定次序乘坐 n 趟列车。另给你一个长度为 n 的整数数组 dist ,其中 dist[i] 表示第 i 趟列车的行驶距离(单位是千米)。

每趟列车均只能在整点发车,所以你可能需要在两趟列车之间等待一段时间。

例如,第 1 趟列车需要 1.5 小时,那你必须再等待 0.5 小时,搭乘在第 2 小时发车的第 2 趟列车。
返回能满足你准时到达办公室所要求全部列车的 最小正整数 时速(单位:千米每小时),如果无法准时到达,则返回 -1 。

生成的测试用例保证答案不超过 107 ,且 hour 的 小数点后最多存在两位数字 。
在这里插入图片描述


题目大意:

  • 你需要乘坐 n 趟列车,并且需要按给定的顺序乘坐。
  • 每趟列车都要在整点发车,所以可能需要在两趟列车之间等待。
  • 你可以给定一个浮点数 hour,作为你所能使用的最大通勤时间。
  • 需要找到一个最小的正整数速度,使得总用时不超过给定的 hour,无法达到则返回 -1。

解题思路:

  1. 理解等待时间:由于列车只能整点发车,即使乘车时间不满整数小时,也需要等到下一个整数小时。
  2. 计算用时
    • 对于前 n-1 趟列车,必须在整点发车。其总时间为这些列车每趟到达所需时间的上限。
    • 最后一趟列车则直接计算实际用时,因为它不需要等下一个整点发车。
  3. 二分查找
    • 初始最小速度设为1,最大速度设定为题目保证的上限(或使用一个足够大的值)。
    • 使用二分查找来找到使得总乘机时间不超过 hour 的最小整数速度。
    • 对于每个速度,通过计算每趟列车旅游所消耗的时间来判断该速度是否符合条件。

C和C++代码实现:

C++代码


bool canReachOnTime(const vector<int>& dist, double hour, int speed) {double totalTime = 0.0;int n = dist.size();for (int i = 0; i < n; ++i) {double timeNeeded = static_cast<double>(dist[i]) / speed;if (i == n - 1) {totalTime += timeNeeded; // Last train, no need to round up} else {totalTime += ceil(timeNeeded); // Round up for all but the last train}}return totalTime <= hour;
}int minSpeedOnTime(const vector<int>& dist, double hour) {int left = 1, right = 1e7, minSpeed = -1;while (left <= right) {int mid = left + (right - left) / 2;if (canReachOnTime(dist, hour, mid)) {minSpeed = mid;right = mid - 1;} else {left = mid + 1;}}return minSpeed;
}

C代码

由于C语言的math.h库并没有很好的支持浮点的ceil函数,你可能需要手动编写这个功能。

#include <stdio.h>
#include <math.h>int canReachOnTime(int* dist, int distSize, double hour, int speed) {double totalTime = 0.0;for (int i = 0; i < distSize; ++i) {double timeNeeded = (double)dist[i] / speed;if (i == distSize - 1) {totalTime += timeNeeded; // Last train, no need to round up} else {totalTime += ceil(timeNeeded); // Round up for all but the last train}}return totalTime <= hour;
}int minSpeedOnTime(int* dist, int distSize, double hour) {int left = 1, right = 10000000, minSpeed = -1;while (left <= right) {int mid = left + (right - left) / 2;if (canReachOnTime(dist, distSize, hour, mid)) {minSpeed = mid;right = mid - 1;} else {left = mid + 1;}}return minSpeed;
}int main() {int dist[] = {1, 3, 2};int n = sizeof(dist) / sizeof(dist[0]);double hour = 2.7;printf("Minimum speed required: %d\n", minSpeedOnTime(dist, n, hour));return 0;
}

算法和代码分析:

  • canReachOnTime函数:这个辅助函数判断给定的速度下能否在限制时间内到达。它遍历所有列车计算总用时。对倒数第二趟列车,使用ceil将乘车时间圆整至下一整数以模拟等待时间的影响。
  • 二分查找:利用二分查找来优化最小的速度搜索,将搜索空间从1到10000000,每次通过中值检验是否满足时间条件,不符合则增加速度范围,符合则记录并尝试更小速度。
  • 复杂度:二分查找的复杂度为O(log M),其中M为速度的搜索范围,判断能否到达的复杂度为O(N),因此总复杂度为O(N log M)。

相关文章:

力扣题解1870

这道题是一个典型的算法题&#xff0c;涉及计算在限制的时间内列车速度的最小值。这是一个优化问题&#xff0c;通常需要使用二分查找来求解。 题目描述&#xff08;中等&#xff09; 准时到达的列车最小时速 给你一个浮点数 hour &#xff0c;表示你到达办公室可用的总通勤时…...

D3.js数据可视化基础——基于Notepad++、IDEA前端开发

实验:D3.js数据可视化基础 1、实验名称 D3数据可视化基础 2、实验目的 熟悉D3数据可视化的使用方法。 3、实验原理 D3 的全称是(Data-Driven Documents),是一个被数据驱动的文档,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。本次实…...

在Robot Framework中Run Keyword If的用法

基本用法使用 ELSE使用 ELSE IF使用内置变量使用Python表达式本文永久更新地址: 在Robot Framework中&#xff0c;Run Keyword If 是一个条件执行的关键字&#xff0c;它允许根据某个条件来决定是否执行某个关键字。下面是 Run Keyword If 的基本用法&#xff1a; Run Keyword…...

虚拟机ip突然看不了了

打印大致如下&#xff1a; 解决办法 如果您发现虚拟机的IP地址与主机不在同一网段&#xff0c;可以采取的措施之一是调整网络设置。将虚拟机的网络模式更改为桥接模式&#xff0c;这样它就会获得与主机相同的IP地址&#xff0c;从而处于同一网段。或者&#xff0c;您可以使用…...

LeetCode[中等] 763. 划分字母区间

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 思路 贪心…...

Java LeetCode每日一题

997. 找到小镇的法官 package JavaExercise20241002;public class JavaExercise {public static void main(String[] args) {int[][] array {{1,3},{2,3},{3,1}};Solution solution new Solution();System.out.println(solution.findJudge(3, array));} }class Solution {pu…...

数据结构--集合框架

目录 1. 什么是集合框架 2. 背后所涉及的数据结构以及算法 2.1 什么是数据结构 2.2 容器背后对应的数据结构 1. 什么是集合框架 Java 集合框架 Java Collection Framework &#xff0c;又被称为容器 container &#xff0c;是定义在 java.util 包下的一组接口 int…...

Win10鼠标总是频繁自动失去焦点-非常有效-重启之后立竿见影

针对Win10鼠标频繁自动失去焦点的问题&#xff0c;可以尝试以下解决方案&#xff1a; 一、修改注册表&#xff08;最有效的方法-重启之后立竿见影&#xff09; 打开注册表编辑器&#xff1a; 按下WindowsR组合键&#xff0c;打开运行窗口。在运行窗口中输入“regedit”&#x…...

智能涌现|迎接智能时代,算力产业重构未来

前言 OpenAI首席执行官山姆奥特曼在《智能时代》中描绘了一个令人振奋的未来图景&#xff0c;其中算力产业将扮演至关重要的角色。奥特曼预测&#xff0c;我们可能在“几千天内”迎来超级智能&#xff0c;这一进程将极大加速社会结构的智能化转型。 这一预测与算力产业的未来…...

关于HTML 案例_个人简历展示01

案例效果展示 代码 <!DOCTYPE html> <lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简历信息</title> </he…...

【前端开发入门】css快速入门

目录 引言一、css盒模型1. 盒模型概念2. 盒模型案例 二、css编写1. html文件内部编写1.1 标签style属性编写1.2 css选择器关联1.2.1 id选择器1.2.2 class选择器1.2.3 标签选择器1.2.4 css选择器作用域1.2.5 其他选择器1.2.6 各css选择器优先级 2. 单独维护css文件2.1 创建css文…...

java中创建不可变集合

一.应用场景 二.创建不可变集合的书写格式&#xff08;List&#xff0c;Set&#xff0c;Map) List集合 package com.njau.d9_immutable;import java.util.Iterator; import java.util.List;/*** 创建不可变集合:List.of()方法* "张三","李四","王五…...

D25【 python 接口自动化学习】- python 基础之判断与循环

day25 for 循环 学习日期&#xff1a;20241002 学习目标&#xff1a;判断与循环&#xfe63;-35 for 循环&#xff1a;如何遍历一个对象里的所有元素&#xff1f; 学习笔记&#xff1a; for 循环与while循环的区别 for循环的定义 使用for循环遍历序列 使用for循环遍历字典…...

HTTP1.0和HTTP1.1有什么区别

HTTP/1.0 和 HTTP/1.1 是两个不同版本的 HTTP 协议。虽然它们的核心功能都是提供网页数据传输&#xff0c;但 HTTP/1.1 对 HTTP/1.0 做了很多改进&#xff0c;提升了性能和灵活性。以下是它们的主要区别&#xff1a; 1. 持久连接&#xff08;Persistent Connection&#xff09…...

卡夫卡的理解

一、架构理解 在这个单聊新架构中&#xff0c;涉及多个服务器组件共同协作来实现单聊功能。 ChatAccessServer&#xff1a;可能负责处理单聊相关的访问请求&#xff0c;比如用户登录单聊以及发送单消息的请求接入。ChatHttpPushServer&#xff1a;推测其用于通过 HTTP 协议推…...

基础算法之滑动窗口--Java实现(上)--LeetCode题解:长度最小的子数组-无重复字符的子串-最大连续1的个数III-将x减到0的最小操作数

这里是Thembefue 今天讲解算法中较为经典的一个算法 > 滑动窗口 本讲解主要通过题目来讲解以理解算法 讲解分为三部分&#xff1a;题目解析 > 算法讲解 > 编写代码 滑动窗口 在正式进入题目的讲解之前&#xff0c;得先了解一下什么是滑动窗口&#xff0c;以及应该在什…...

Linux -- 文件系统(文件在磁盘中的存储)

目录 前言&#xff1a; 了解机械磁盘 初始盘片与磁头 盘片是怎么存数据的呢&#xff1f; 详解盘片 如何访问磁盘中的一个扇区呢&#xff1f; -- CHS 定位法 磁盘的逻辑存储 LBA&#xff08;Logical Block Addressing --- 逻辑块寻址&#xff09; 如何将 LBA 地址转换为…...

微服务(Microservices),服务网格(Service Mesh)以及无服务器运算Serverless简单介绍

文章目录 什么是微服务?一、定义与特点二、优势三、组件与架构四、应用场景五、挑战与解决方案什么是服务网格?一、定义与特点二、核心组件三、主要功能四、实现工具五、应用场景六、优势与挑战什么是Serverless?一、定义与特点二、主要领域三、优势四、应用场景五、挑战三者…...

【AIGC】AI时代的数据安全:使用ChatGPT时的自查要点

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;法律法规背景中华人民共和国保守秘密法中华人民共和国网络安全法中华人民共和国个人信息保护法遵守法律法规的重要性 &#x1f4af;ChatGPT的数据使用特点ChatGPT数据安全…...

什么是区块链桥?

什么是区块链桥&#xff1f; 区块链桥是一种实现资产从一个区块链转移至另一个区块链的工具&#xff0c;它解决了区块链技术中不同网络之间缺乏互操作性的问题。区块链桥通过创建代表另一区块链资产的合成衍生品&#xff0c;使得原本互不兼容的区块链资产能够相互连接和转移。…...

机器学习框架

机器学习框架 机器学习框架是用于开发和部署机器学习模型的软件工具。它们提供了一组API和工具&#xff0c;帮助开发人员在各种计算设备上构建、训练和部署机器学习模型。以下是几个常见的机器学习框架&#xff1a; 1.TensorFlow&#xff1a; TensorFlow是一个开源的人工智能…...

金三银四:20道前端手写面试题

文章目录 一、前言二、题目1. 防抖节流解读 2.一个正则题3. 不使用a标签&#xff0c;如何实现a标签的功能4. 不使用循环API 来删除数组中指定位置的元素&#xff08;如&#xff1a;删除第三位&#xff09; 写越多越好5. 深拷贝解读 6. 手写call bind applycall 解读apply 解读 …...

RAC被修改权限及相关问题

RDBMS &#xff1a; 19.19 修改RAC权限及相关问题 修改RAC权限&#xff0c;参考文档&#xff1a; How to check and fix file permissions on Grid Infrastructure environment (Doc ID 1931142.1) Script to capture and restore file permission in a directory (for eg. O…...

Golang | Leetcode Golang题解之第441题排列硬币

题目&#xff1a; 题解&#xff1a; func arrangeCoins(n int) int {return sort.Search(n, func(k int) bool { k; return k*(k1) > 2*n }) }...

数学建模--什么是数学建模?数学建模应该怎么准备?

前言 这是去年底学数学建模老哥的建模课程笔记&#xff1b;未来本人将陆陆续续的更新数学建模相关的一些基础算法&#xff0c;大家可以持续关注一下&#xff1b;提示&#xff1a;数学建模只有实战才能提升&#xff0c;光学算法没有啥意义&#xff0c;也很难学的很懂。 文章目录…...

Java项目实战II基于Java+Spring Boot+MySQL的智能物流管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着电商行业的蓬勃发展&#xff0c;物流行业迎来了前所未有的机遇与挑战。面对日益增长的订单量和复…...

【数据分享】2000—2023年我国省市县三级逐月植被覆盖度(FVC)数值(Shp/Excel格式)

之前我们分享过2000—2023年我国250米分辨率逐月植被覆盖度&#xff08;FVC&#xff09;栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;该数据来源于高吉喜等学者在国家青藏高原科学数据中心平台上分享的数据&#xff0c;合成方式采用月最大值合成&…...

《Linux从小白到高手》理论篇(十一):Linux的系统环境管理

值此国庆佳节&#xff0c;深宅家中&#xff0c;闲来无事&#xff0c;就多写几篇博文。本篇详细深入介绍Linux的系统环境管理。 环境变量 linux系统下&#xff0c;如果你下载并安装了应用程序&#xff0c;很有可能在键入它的名称时出现“command not found”的提示内容。如果每…...

Qt/C++开源控件 自定义雷达控件

使用Qt框架创建一个简单的雷达图&#xff0c;包含动态扫描、目标点生成、刻度和方向标识。代码实现使用C编写&#xff0c;适合用作学习和扩展的基础。 1. 头文件与基本设置 #include "RadarWidget.h" #include <QPainter> #include <QPen> #include &…...

什么是IDE(集成开发环境)?

集成开发环境(IDE)详解 在软件开发的世界中,集成开发环境(IDE,Integrated Development Environment)扮演着至关重要的角色。它是一个综合性的软件应用程序,旨在为软件开发者提供一整套的、易于使用的工具集,以便他们能够更高效地编写、调试、测试和部署代码。简而言之…...

外贸网站建设软件/腾讯企业qq

Linux系统的初步认识和简单控制 一、什么是Linux系统&#xff1f; Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展&#xff0c;Linux得到了来自全世界软件爱好者、组织、…...

建设企业功能型网站/安卓优化大师官方版本下载

chmod&#xff1a;权限更改命令&#xff0c;只有所有者和root可以更改&#xff0c;-R递归设定&#xff1b;chown&#xff1a;更改所有者&#xff0c;只有root可以&#xff1b;chgrp&#xff1a;更改所属组&#xff1b;umask&#xff1a;-S查看权限缺省值&#xff0c;不带-S则设…...

ppt怎么做网站/计算机培训机构哪个最好

/* DML:数据库操作语言主要对表中的数据库进行 增删改****增:插入一条记录insert into 表名 (列名1,列名2..) values (值1,值2..)注意: 1.列名可以在表中选择一列或者几列2.后面的值 必须和前面的列 一一对应3.在SQL中除了int类型的数据,其他数据必须用或者""引起来我…...

网站名称注册/网站代理公司

前言 RHEL7使用了XFS文件系统&#xff0c;而非原来的Ext(Extended file system)。 文件系统 文件系统&#xff1a;是OS用作于明确存储设备(磁盘&#xff0c;固态硬盘)或分区上的文件的方法和数据结构&#xff1b;即在存储设备上组织文件的方法。OS中负责管理和存储文件信息的软…...

合肥市城乡城乡建设局网站/seo推广网站

2019/07/20 尽管不甚了解&#xff0c;但在我的脑海里&#xff0c;她的笑就像冬日里的阳光一般灿烂温暖。 2019/07/21 保持今日式默默关注&#xff0c;另外中耳炎确实难受。 2019/07/28 也不知道啥时候中耳炎能好&#xff0c;最近要努力整爬虫了。第二天永远都比第一天更想。 转…...

深圳营销型网站建设服务费用/百度账号购买网站

很多人说2017年是人工智能的元年&#xff0c;很多人工智能的产品、应用都在陆续落地。之所以人工智能兴起&#xff0c;是因为在这个网络飞速发展时代&#xff0c;数据量在发生着巨大的变化&#xff0c;从而计算速度也随之变化。只有有足够的数据量&#xff0c;才能将数据进行提…...