首页 > 编程语言 >LeetCode:871. 最低加油次数(DP Java)

LeetCode:871. 最低加油次数(DP Java)

时间:2024-10-11 16:18:53浏览次数:3  
标签:10 Java stations int 871 加油站 startFuel 目的地 LeetCode

目录

871. 最低加油次数

题目描述:

实现代码与解析:

DP

原理思路:


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 。

提示:

  • 1 <= target, startFuel <= 109
  • 0 <= stations.length <= 500
  • 1 <= positioni < positioni+1 < target
  • 1 <= fueli < 109

实现代码与解析:

DP

class Solution {
    public int minRefuelStops(int target, int startFuel, int[][] stations) {

        int n = stations.length;
        int[] f = new int[n + 1];
        f[0] = startFuel;
        Arrays.sort(stations, (a, b) -> a[0] - b[0]);
        for (int i = 0; i < stations.length; i++) {

            for (int j = i; j >= 0; j--) { // 从后向前
                if (f[j] >= stations[i][0]) {
                    f[j + 1] = Math.max(f[j + 1], f[j] + stations[i][1]);
                }
            }
        }
        for (int i = 0; i <= n; i++) {
            if (f[i] >= target) {
                return i;
            }
        }
        return -1;
    }
}

原理思路:

        最难的就是想出状态转移公式了,f[i]表示选 i 个加油站,可以走的最大距离。

        先根据距离排序加油站。遍历加油站,然后遍历f,f现在的有值个数最大就是当前遍历的加油站全选,所以从j = i开始,从后向前遍历。如果选j个加油站就可以到达stations[i][0],那么选上当前加油站就可以走更远,表现在代码上就是:

                if (f[j] >= stations[i][0]) {
                    f[j + 1] = Math.max(f[j + 1], f[j] + stations[i][1]);
                }

        注意点就是j从后向前遍历,因为j 依赖于 j - 1,防止重复计算导致距离变大。

标签:10,Java,stations,int,871,加油站,startFuel,目的地,LeetCode
From: https://blog.csdn.net/Cosmoshhhyyy/article/details/142771968

相关文章

  • java毕业设计-基于Springboot的多商家商城系统【代码+论文+PPT】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:Springboot数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能管理员管理:负责系统后台的整体运维,包......
  • java计算机毕业设计分布式生鲜市场信息系统设计与实现(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们生活水平的提高和消费观念的转变,生鲜食品市场迎来了前所未有的发展机遇。然而,传统的生鲜销售模式面临着信息不对称、供应链冗长、损耗率高等......
  • 基于java+springboot的社区心理健康服务平台系统小程序
    基于java+springboot的社区心理健康服务平台系统,旨在为社区居民提供全面的心理健康支持。后端运用springboot构建稳定可靠的服务,负责处理用户信息管理、心理咨询师资源整合、心理测评工具管理以及预约咨询安排等核心业务,与数据库有效交互以存储用户心理健康档案、咨询......
  • 基于java+springboot的社区汽车共享平台系统
    基于java+springboot的社区汽车共享平台系统,致力于为社区居民提供便捷的汽车共享服务。后端采用springboot构建,高效处理车辆信息管理、用户认证与授权、预订流程控制及费用结算等业务,与数据库紧密交互确保车辆状态、用户信息及预订记录准确存储与快速检索。前端利用相......
  • 教你如何免费获取股票数据用python、JavaScript (Node.js)、JAVA等多种语言的实例代码
    ​近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据......
  • IDEA 呈现橘色 、java 无效的源发行版
    文章目录IDEA项目呈现橘色解决方案java无效的源发行版解决方案IDEA项目呈现橘色如图所示解决方案在IDEA中选择【File】>【ProjectStructure】>【JavaDownloads】最后点击OKApply设置完成后,重新构造一下java无效的源发行版如图所示解决方......
  • 【JAVA开源】基于Vue和SpringBoot卫生健康系统
    本文项目编号T076,文末自助获取源码\color{red}{T076,文末自助获取源码}......
  • JAVA类加载器是从本地
    JAVA类加载器是从本地一、概述1、作用类加载器是JVM执行类加载机制的前提。ClassLoader的作用:ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的java.lang.Class对象......
  • Java是值传递还是引用传递?
    相信很多人听到值传递和引用传递,多多少少都会有一个疑问,为什么Java是值传递,引用数据类型也是值传递?为什么会混淆引用数据类型和引用传递?说白了,为什么很多人包括作者,之前都觉得java的基本数据类型是值传递,没问题,因为传入参数是一个值相同的副本,那为什么传入一个对象也是值传递......
  • 线性回归算法(Java)
      手动实现线性回归(梯度下降法)1publicclassLinearRegressionGD{2privatedoublelearningRate;3privateintiterations;4privatedoubleslope;5privatedoubleintercept;67publicLinearRegressionGD(doublelearningRate,......