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

力扣(leetcode)每日一题 871 最低加油次数 | 贪心

871. 最低加油次数

题干

汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。

沿途有加油站,用数组 stations 表示。其中 stations[i] = [positioni, fueli] 表示第 i 个加油站位于出发位置东面 positioni 英里处,并且有 fueli 升汽油。

假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。它每行驶 1 英里就会用掉 1 升汽油。当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。

为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则返回 -1

注意:如果汽车到达加油站时剩余燃料为 0,它仍然可以在那里加油。如果汽车到达目的地时剩余燃料为 0,仍然认为它已经到达目的地。

示例 1:

**输入:**target = 1, startFuel = 1, stations = []
**输出:**0
**解释:**可以在不加油的情况下到达目的地。

示例 2:

**输入:**target = 100, startFuel = 1, stations = [[10,100]]
输出:-1
**解释:**无法抵达目的地,甚至无法到达第一个加油站。

示例 3:

**输入:**target = 100, startFuel = 10, stations = [[10,60],[20,30],[30,30],[60,40]]
**输出:**2
解释:
出发时有 10 升燃料。
开车来到距起点 10 英里处的加油站,消耗 10 升燃料。将汽油从 0 升加到 60 升。
然后,从 10 英里处的加油站开到 60 英里处的加油站(消耗 50 升燃料),
并将汽油从 10 升加到 50 升。然后开车抵达目的地。
沿途在两个加油站停靠,所以返回 2 。

题解

先把路过的加油站的油收集起来。当达到i加油站时候,发现不够。再弹出之前加油站收集的油(使用优先级队列),count数量+1。
然后经过所有加油站后,油依旧不够达到终点,再使用while弹出之前收集的油count数量+1

public static int minRefuelStops(int target, int startFuel, int[][] stations) {  int total = startFuel;  int count = 0;  PriorityQueue<Integer> heap = new PriorityQueue<>((v1, v2) -> {  return v2 - v1;  });  for (int i = 0; i < stations.length; i++) {  while (total - stations[i][0] < 0) {  if (heap.isEmpty()) {  return -1;  }  Integer poll = heap.poll();  count++;  total += poll;  if (target <= total) {  return count;  }  }  heap.add(stations[i][1]);  }  // 这里已经走到最后一战了  while (target > total) {  if (heap.isEmpty()) {  return -1;  }  Integer poll = heap.poll();  count++;  total += poll;  }  return count;  
}
总结

和滑动窗口的写法是一样的,但是这是属于贪心算法。滑动窗口也属于贪心这一类问题。
这个题目还是比较简单的,如果因为看到hard而没有做出来就太可惜了

官方题解用了一个while解决问题,本质是一样的,是多引入一个加油点 位置为终点,补充为0

相关文章:

力扣(leetcode)每日一题 871 最低加油次数 | 贪心

871. 最低加油次数 题干 汽车从起点出发驶向目的地&#xff0c;该目的地位于出发位置东面 target 英里处。 沿途有加油站&#xff0c;用数组 stations 表示。其中 stations[i] [positioni, fueli] 表示第 i 个加油站位于出发位置东面 positioni 英里处&#xff0c;并且有 f…...

ppt压缩文件怎么压缩?压缩PPT文件的多种压缩方法

ppt压缩文件怎么压缩&#xff1f;当文件体积过大时&#xff0c;分享和传输就会变得困难。许多电子邮件服务对附件的大小有限制&#xff0c;而在网络环境不佳时&#xff0c;上传和下载大文件可能耗时较长。此外&#xff0c;在不同设备上播放时&#xff0c;较大的PPT文件还可能导…...

2024.10月11日--- SpringMVC拦截器

拦截器 1 回顾过滤器&#xff1a; Servlet规范中的三大接口&#xff1a;Servlet接口&#xff0c;Filter接口、Listener接口。 过滤器接口&#xff0c;是Servlet2.3版本以来&#xff0c;定义的一种小型的&#xff0c;可插拔的Web组件&#xff0c;可以用来拦截和处理Servlet容…...

uniapp 锁屏显示插件 Ba-LockShow(可让vue直接具备锁屏显示能力)

简介 Ba-LockShow 是一款可以直接使uniapp的vue界面在锁屏页展示的插件。 支持使vue直接具备锁屏显示能力支持设置锁屏显示和不显示支持唤醒屏幕 截图展示&#xff08;仅参考&#xff09; 支持定制、本地包、源码等&#xff0c;有建议和需要&#xff0c;请点击文章结尾“Unia…...

CSS计数器

CSS 中的计数器类似于变量&#xff0c;可以实现简单的计数功能&#xff0c;并将结果显示在页面上&#xff0c;在早期的网站上应用比较广泛。要实现计数器需要用到以下几个属性&#xff1a; counter-reset&#xff1a;创建或者重置计数器&#xff1b;counter-increment&#xf…...

嵌入式Linux:信号集

目录 1、信号集初始化 2、向信号集中添加或删除信号 3、测试信号是否在信号集中 在 Linux 系统中&#xff0c;处理多个信号时常用到一种数据结构&#xff1a;信号集&#xff08;sigset_t&#xff09;。信号集允许我们将多个信号组织在一起&#xff0c;以便在系统调用中传递和…...

Linux 外设驱动 应用 1 IO口输出

从这里开始外设驱动介绍&#xff0c;这里使用的IMX8的芯片作为驱动介绍 开发流程&#xff1a; 修改设备树&#xff0c;配置 GPIO1_IO07 为 GPIO 输出。使用 sysfs 接口或编写驱动程序控制 GPIO 引脚。编译并测试。 这里假设设备树&#xff0c;已经配置好了。不在论述这个问题…...

基于SpringBoot+Vue+MySQL的留守儿童爱心网站

系统展示 用户前台界面 管理员后台界面 系统背景 随着现代社会的发展&#xff0c;留守儿童问题日益受到关注。传统的纸质管理方式已经无法满足现代人们对留守儿童爱心信息的需求。为了提高留守儿童爱心信息的管理效率&#xff0c;增加用户信息的安全性&#xff0c;并方便及时反…...

调用第三方接口

目录 一、分析给出的接口文档 二、请求体格式之间的区别 三、示例代码 一、分析给出的接口文档 一般的接口文档包括以下几大部分&#xff1a; 1、请求URL&#xff1a;http://{ip}:{port}/api/ec/dev/message/sendCustomMessageSingle 2、请求方式&#xff1a;POST、GET等 3、…...

JAVA 多线程入门例子:CountDownLatch

首先确定线程数量。如果数据集合的大小小于50&#xff0c;就只使用一个线程&#xff1b;否则使用5个线程。计算每个线程平均处理的数据数量sizePerThread以及余数remainder。在划分数据子集合时&#xff0c;对于每个线程的处理范围进行计算。如果有余数&#xff0c;就将余数依次…...

k8s jenkins 动态创建slave

k8s jenkins 动态创建slave 简述使用jenkins动态slave的优势&#xff1a;配置jenkins动态slave配置 Pod Template配置容器模板挂载卷 测试 简述 持续构建与发布是我们日常工作中必不可少的一个步骤&#xff0c;目前大多公司都采用 Jenkins 集群来搭建符合需求的 CI/CD 流程&am…...

MVS海康工业相机达不到标称最大帧率

文章目录 一、相机参数设置1、取消相机帧率限制2、修改相机图像格式3、调整相机曝光时间4、检查相机数据包大小&#xff08;网口相机特有参数&#xff09;5、 恢复相机默认参数6、 相机 ADC 输出位深调整 二、系统环境设置1、 网口相机设置2、 USB 相机设置 一、相机参数设置 …...

数据结构:用双栈实现一个队列

要用两个栈实现一个队列&#xff0c;可以利用“栈”的后进先出 (LIFO) 特性来模拟“队列”的先进先出 (FIFO) 操作。具体做法是使用两个栈&#xff1a;一个作为入栈栈&#xff0c;另一个作为出栈栈。 算法步骤 入队操作&#xff08;enqueue&#xff09;&#xff1a; 将元素压…...

QScroller Class

Header:#include < QScroller > qmake:QT += widgets Since:Qt 5.0 Inherits:QObject This class was introduced in Qt 5.0. Public Types enum Input {InputPress, InputMove, InputRelease } enum ScrollerGestureType {TouchGesture, LeftMouseButtonGesture,…...

React高阶组件详解

React高阶组件&#xff08;HOC&#xff09;详解 定义 React高阶组件&#xff08;HOC&#xff09;是一个函数&#xff0c;该函数接受一个组件作为参数并返回一个新的组件。高阶组件本身不是一个组件&#xff0c;而是一个函数&#xff0c;它利用React的组合特性&#xff0c;对传入…...

TextView把其它控件挤出屏幕的处理办法

1.如果TextView后面的控件是紧挨着TextView的&#xff0c;可以给TextView添加maxWidth限制其最大长度 上有问题的布局代码 <?xml version"1.0" encoding"utf-8"?> <layout xmlns:android"http://schemas.android.com/apk/res/android&qu…...

长度为 K 的重复字符子串数目

长度为 K 的重复字符子串 给你一个由小写字母组成的长度为n的字符串 S &#xff0c;找出所有长度为 k 且包含重复字符的子串&#xff0c;请你返回全部满足要求的子串的数目。 数据范围&#xff1a; 2≤k≤400 , 5≤n≤900 进阶&#xff1a; 时间复杂度O(n)&#xff0c;空间复杂…...

html+css+js实现轮播图

实现效果&#xff1a; HTML部分 <div class"carousel"><div class"carousel-wrapper"><img src"./image/1.png" alt""></div><ul class"carousel-indictor"><li class"active"…...

Boost集成模型异同

一、常见Boost集成模型 AdaBoost、GBDT和XGBoost都是集成学习中的提升&#xff08;Boosting&#xff09;算法&#xff0c;它们通过组合多个弱学习器来构建一个强学习器。从经验上来说&#xff0c;XGBoost是诸多竞赛的大杀器&#xff0c;在实际业务工作中可能需要用到集成模型的…...

【系统架构设计师】案例专题四:嵌入式系统考点梳理

更多内容请见: 备考系统架构设计师-核心总结目录 摘要:本文主要梳理系统架构设计师 - 嵌入式系统 案例考点 ,主要包括嵌入式相关概念、软件和硬件可靠性、冗余技术、软件容错、集群技术、负载均衡、可维护性的评价指标、软件维护的分类等。 文章目录 一、相关概念二、软件可…...

BooruDatasetTagManager AiApiServer深度配置:解决常见模型兼容性问题

BooruDatasetTagManager AiApiServer深度配置&#xff1a;解决常见模型兼容性问题 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager BooruDatasetTagManager是一款功能强大的AI图片标签管理工具&#xff…...

5分钟快速上手Vue3思维导图:打造专业级数据可视化应用

5分钟快速上手Vue3思维导图&#xff1a;打造专业级数据可视化应用 【免费下载链接】vue3-mindmap Mindmap component for Vue3 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-mindmap Vue3-Mindmap是一个基于Vue 3和TypeScript构建的现代化思维导图组件&#xff0c…...

终极指南:如何使用Harepacker复活版轻松打造你的MapleStory游戏世界

终极指南&#xff1a;如何使用Harepacker复活版轻松打造你的MapleStory游戏世界 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected 想要个性化修…...

音频解密工具终极指南:浏览器端高效解锁加密音乐文件完整解决方案

音频解密工具终极指南&#xff1a;浏览器端高效解锁加密音乐文件完整解决方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目…...

Rust编程学习.0-安装及环境搭建

目录 前言 一、Rust是什么&#xff1f; 二、Rust安装及环境搭建 1.安装 2.环境搭建 总结 前言 本人借助工作的机会准备好好学习语言编程以及深造嵌入式开发方向&#xff0c;更加系统深入网络&#xff0c;为了不再和之前一样做完再花时间回忆并记录&#xff0c;0帧起手开始…...

【RK3588-AI-003】RK3588串口+SSH远程连接配置+文件互传实操

一、前言 很多刚入手RK3588开发板做AI部署、嵌入式开发的同学&#xff0c;都会遇到三大难题&#xff1a; ❌ 不知道怎么接线、看不懂串口打印日志&#xff0c;调试报错无从下手&#xff1b; ❌ 每次重启开发板IP都会变&#xff0c;频繁修改连接地址&#xff0c;开发极其麻烦&…...

别再死记硬背了!用Python/JavaScript/C++对比理解‘整型变布尔’的底层逻辑

别再死记硬背了&#xff01;用Python/JavaScript/C对比理解‘整型变布尔’的底层逻辑 在编程语言的学习过程中&#xff0c;类型系统是最基础也最容易被忽视的部分。特别是当开发者从一门动态类型语言转向静态类型语言时&#xff0c;经常会遇到一些"反直觉"的类型转换…...

别光顾着写EXP:复盘BUUCTF warmup_csaw_2016,聊聊PWN题里的‘信息泄露’与安全编程

从CTF漏洞利用到安全编程&#xff1a;深入解析信息泄露与防御实践 引言 在网络安全竞赛和实际系统安全中&#xff0c;信息泄露往往成为攻击者突破防御的第一块敲门砖。2016年CSAW CTF的warmup题目虽然看似简单&#xff0c;却完美展示了这类漏洞的典型模式——程序不仅存在栈溢出…...

从用户吐槽到功能升级:我们如何用sunny-video优化了uniapp视频课件的学习体验

从用户痛点到产品升级&#xff1a;sunny-video如何重塑uniapp视频学习体验 在线教育产品的核心价值在于高效传递知识&#xff0c;而视频播放体验往往成为用户留存的关键瓶颈。去年第三季度&#xff0c;我们团队收到超过1200条用户反馈&#xff0c;其中67%集中抱怨两个问题&…...

照片直播如何实现?Android 通过 PTP/MTP 有线连接相机的技术方案

一、应用场景 在婚礼摄影、赛事记录、电商拍摄等业务中&#xff0c;客户往往希望&#xff1a; 摄影师按下快门&#xff0c;手机或平板立刻能看到照片。 常见传输方式的对比&#xff1a; 方式 问题 WiFi 延迟高、断连频繁 蓝牙 传输速度慢 有线 OTG ✅ 稳定、实时、低…...