[python 刷题] 853 Car Fleet

news2024/11/25 3:25:37

[python 刷题] 853 Car Fleet

哎……周赛第三题解应该用 monotonic stack 做优化的,没写出来,所以多刷两题 monotonic stack 的题目找找感觉……

题目:

There are n cars going to the same destination along a one-lane road. The destination is target miles away.

You are given two integer array position and speed, both of length n, where position[i] is the position of the ith car and speed[i] is the speed of the ith car (in miles per hour).

A car can never pass another car ahead of it, but it can catch up to it and drive bumper to bumper at the same speed. The faster car will slow down to match the slower car’s speed. The distance between these two cars is ignored (i.e., they are assumed to have the same position).

A car fleet is some non-empty set of cars driving at the same position and same speed. Note that a single car is also a car fleet.

If a car catches up to a car fleet right at the destination point, it will still be considered as one car fleet.

Return the number of car fleets that will arrive at the destination.

如果车碰撞在一起的话,就会融合成一个 cluster,这题问的是到了终点后会有几个 cluster

几个核心重点是:

  • 所有车共用一条道
  • 永远不可能超车
  • 后车撞到前车,后车速会降到前车的速度
  • 两车之间没有间距

以第一个例子 target = 12, position = [10,8,0,5,3], speed = [2,4,1,1,3] 来说,图解大概是这个样子的:

在这里插入图片描述

图解其实能够比较明显的看出有几个 cluster

这道题的一个解法是使用 monotonic stack 去做,思路大致如下:

  1. 构成 [position, time] 的配对

  2. position 使用降序排序

    因为有一个 target 的限制,所以这道题会出现这两种情况:

    1. 两辆车会在抵达 target 之前/之时相遇

      这也就意味着初始位置较小的那一条在 0 < = t < = t a r g e t 0 <= t <= target 0<=t<=target 这个时间段之间会遇到初始位置较大的那一条

      这个时候,初始位置较大的那辆车相当于作为距离和速度的上限,两辆车相遇后即可合并为一个 cluster,并且依旧以初始位置较大且速度较慢的那辆车作为上限

      其原因就在于 后车撞到前车,后车速会降到前车的速度 这条限制,换言之,一旦相遇后,两辆车其实就可以视为一辆车

    2. 两条线不会在抵达 target 之前/之时相遇

      这种情况到下一步处理

  3. 完成了之后就可以对抵达速度使用 monotonic stack 进行追溯,这个时候只需要保留抵达时间耗时较久(速度较慢)的那条即可

    依旧以上面的案例进行解释,将其进行排序后的结果为:[(10, 2), (8, 4), (5, 1), (3, 3), (0, 1)]

    • 第一辆车抵达终点的时间为 1.0

    • 第二辆车抵达终点的时间也为 1.0

      这时候可以讲两辆车的抵达时间合并,并且取第一辆的抵达时间

      主要原因也是因为在初始距离较大,初始速度较慢,在抵达最终距离前/时被追上,一定意味着后车抵达最终距离的耗时 < = <= <= 前车

    • 第三辆抵达终点位置的时间为 7.0

      这时候它与前车不相交,因此自成一个 cluster

    • 重复当前操作一直到遍历完所有车

使用 LC 上提供的第三个案例相对而言会更直接一些:

target = 100, position = [0,2,4], speed = [4,2,1]

在这里插入图片描述

代码如下:

class Solution:
    def carFleet(self, target: int, position: List[int], speed: List[int]) -> int:
        # store (speed, pos) pair
        pair = [(p, s) for p, s in zip(position, speed)]
        stack = []
        pair.sort(reverse = True)

        for p, s in pair:
            stack.append((target - p) / s)
            print((target - p) / s)
            if len(stack) >= 2 and stack[-1] <= stack[-2]:
                stack.pop()

        return len(stack)

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

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

相关文章

【操作系统笔记九】并发安全问题

用户态抢占和内核态抢占 内核中可以执行以下几种程序&#xff1a; ① 当前运行的进程&#xff1a;陷阱程序&#xff08;系统调用&#xff09; 和 故障程序&#xff08;page fault&#xff09; &#xff0c;进程运行在内核态的时候&#xff0c;其实就是在执行进程在用户态触发的…

如何扫描MSI安装文件的路径

今天有个需求&#xff0c;需要扫描已经安装应用, 其中有个华云桌面 其中的UninstallString 值是 MsiExec.exe /X{D20A661B-0CBA-4DE3-A1F6-353D8153725D} 无法直接获取其安装目录&#xff0c; MsiGetProductInfoW 等API INSTALLPROPERTY_INSTALLLOCATION 也不好使 自己写一个…

Supervisor进程管理

Supervisor进程管理 概述&#xff1a;supervisor 是一个用 python 语言编写的进程管理工具&#xff0c;它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死&#xff0c;supervisor 监听到进程死后&#xff0c;可以很方便的让进程自动恢复&#xff0c;…

区块链实验室(26) - 区块链期刊Blockchain: Research and Applications

Elsevier出版物“Blockchain: Research and Applications”是浙江大学编审的期刊。该期刊自2020年创刊&#xff0c;并出版第1卷。每年出版4期&#xff0c;最新期是第4卷第3期(2023年9月)。 目前没有官方的IF&#xff0c;Elsevier的引用因子Citescore是6.4。 虽然是新刊&#xf…

《开发实战》18 | 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?

取长补短之 Redis vs MySQL 做一个简单测试&#xff0c;分别填充 10 万条数据到 Redis 和 MySQL 中。MySQL 中的 name字段做了索引&#xff0c;相当于 Redis 的 Key&#xff0c;data 字段为 100 字节的数据&#xff0c;相当于 Redis 的Value。在我的电脑上&#xff0c;使用 wr…

免费的视频剪辑素材,可商用。

找免费可商用的视频剪辑素材&#xff0c;就上这6个网站&#xff0c;强推&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富&#xff0c;网站主要还是以设计类素材为主&#xff0c;高清视频素材也很多&am…

【软件测试】黑盒测试用例的四种设计方法

一、输入域测试用例设计方法 输入域测试法是一种综合考虑了等价类划分、边界值分析等方法的综合方法&#xff0c;针对输入域测试法中可能出现的各种情况&#xff0c;输入域测试法主要考虑三个方面&#xff1a;  (1)极端测试(ExtremalTesting)&#xff0c;要求在输入域中选择…

汽车数字化转型:存储驱动创新未来

通过在存储领域持续不断的技术创新&#xff0c;西部数据正在助力汽车行业打造更加辉煌灿烂的未来。 汽车数字化转型大会上的创新存储 近日&#xff0c;作为智能汽车领域的行业盛宴&#xff0c;2023第二届汽车数字化转型大会在上海揭幕。 本届汽车数字转型大会不但聚集了全球汽车…

Python+selenium自动化生成测试报告

批量执行完用例后&#xff0c;生成的测试报告是文本形式的&#xff0c;不够直观&#xff0c;为了更好的展示测试报告&#xff0c;最好是生成HTML格式的。 unittest里面是不能生成html格式报告的&#xff0c;需要导入一个第三方的模块&#xff1a;HTMLTestRunner 一、导入HTMLT…

springboot如何接入netty,实现在线统计人数?

springboot如何接入netty&#xff0c;实现在线统计人数&#xff1f; Netty 是 一个异步事件驱动的网络应用程序框架 &#xff0c;用于快速开发可维护的高性能协议服务器和客户端。 Netty ​ 是一个 NIO 客户端服务器框架 ​&#xff0c;可以快速轻松地开发协议服务器和客户端等…

使用富斯i6遥控器设置6种飞行模式

使用富斯i6遥控器设置6种飞行模式 将富斯i6遥控器的SWC和SWD分别设置为ch5和ch6,然后使用混控功能设置6段开关,以实现6种飞行模式 一、设置辅助通道 进入系统菜单,选择 Functions Setup 选项,进入 Aux. channels 进行设置。将 Channel 5设置为 SwC,Channel 6 设置为 Sw…

CompletableFuture-CompletionStage接口源码分析和四大静态方法初讲

2.3 CompletableFuture对Future的改进 2.3.1 CompletableFuture为什么会出现 get()方法在Future计算完成之前会一直处在阻塞状态下&#xff0c;阻塞的方式和异步编程的设计理念相违背。 isDene()方法容易耗费cpu资源&#xff08;cpu空转&#xff09;&#xff0c; 对于真正的…

SpringBoot @value注解动态刷新

参考资料 Spring系列第25篇&#xff1a;Value【用法、数据来源、动态刷新】【基础系列】SpringBoot配置信息之配置刷新【基础系列】SpringBoot之自定义配置源的使用姿势【基础系列】SpringBoot应用篇Value注解支持配置自动刷新能力扩展Spring Boot 中动态更新 Value 配置 一. …

完成“重大项目”引进签约,美创科技正式落户中国(南京)软件谷

近日&#xff0c;美创科技正式入驻中国&#xff08;南京&#xff09;软件谷&#xff0c;并受邀出席中国南京“金洽会"之“雨花台区数字经济创新发展大会”。美创科技副总裁罗亮亮作为代表&#xff0c;在活动现场完成“重大项目”引进签约。 作为国家重要的软件产业与信息服…

Redis之set类型

文章目录 Redis之set类型1. 添加元素/获取集合中的所有元素/获取集合中元素个数2. 删除元素3. 判断元素是否在集合中3. 从集合中随机弹出一个元素&#xff0c;元素不删除4. 从集合中随机弹出元素&#xff0c;出一个删一个5. 将元素从一个集合转移到另外一个集合6. 集合的差集7.…

周记之重新开始

对于这周的学习&#xff0c;我进行了深刻的反思&#xff1a; 先来说说每天做了什么&#xff1a; 9.18号&#xff1a;把这个顶部的个人信息画出来了&#xff1b;然后记了两个单词&#xff08;这是能说的吗&#xff0c;这两个单词还是之前复习的&#xff09;现在都记忆犹新&…

31.下一个排列

方法&#xff1a;两遍扫描 举例&#xff1a; 4 5 2 6 3 1排列中较小数为2&#xff0c;较大数为3&#xff0c;交换两者得&#xff1a;4 5 3 6 2 1&#xff0c;将[i1,n)区间改成升序&#xff1a;得下一个排列&#xff1a; 4 5 3 1 2 6。 若第一步找不到较小数&#xff0c;即当前排…

基础算法--区间合并

区间合并简介 区间合并模型是一种竞赛里比较常见的模型&#xff0c;他的含义是&#xff0c;给你n个区间&#xff0c;要你合并所有有交集的区间&#xff0c;并求出合并后剩下的区间个数&#xff0c;如区间[1, 4]和[2, 3]可以合并成[1, 4]&#xff0c;但是[1, 2] 和 [3, 4] 不可…

SLAM从入门到精通(rviz的使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在ros开发当中&#xff0c;rviz和tf都是用的比较多的一个工具。前者是为了实现传感器数据和计算结果的可视化&#xff0c;后者主要是为了显示各个传…

深度学习中什么是embedding

使用One-hot 方法编码的向量会很高维也很稀疏。假设我们在做自然语言处理(NLP)中遇到了一个包含2000个词的字典&#xff0c;当使用One-hot编码时&#xff0c;每一个词会被一个包含2000个整数的向量来表示&#xff0c;其中1999个数字是0&#xff0c;如果字典再大一点&#xff0c…