问题描述:

871. 最低加油次数
汽车从起点出发驶向目的地,该目的地位于出发位置东面 target英里处。

沿途有加油站,每个station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 station[i][1] 升汽油。

假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。它每行驶 1 英里就会用掉 1 升汽油。

当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。

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

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

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

提示:

  • 1 <= target, startFuel, stations[i][1] <= 10^9
  • 0 <= stations.length <= 500
  • 0 < stations[0][0] < stations[1][0] < ... < stations[stations.length-1][0] < target

问题分析:

这个题目使用动态规划的思想,基本思路,设dp[i]表示第i次加油之后可以达到的最远距离,很显然,i <= 加油站的个数,求出dp之后,从头遍历一边,找到第一个 dp[i] >= target 的 i ,就是最少的加油次数,如果没有就返回-1。
(1)问题 dp[i] 怎么求? 首先,从头开遍历加油站,每当遍历到第i个加油站时,dp[t+1] = max(dp[t+1], dp[t] + arr[i]),其中t+1 <= i,然后依次,从后向前更新dp,可以这样理解,dp[t] 再加一次油arr[i],得到的新的dp[t+1]是否是比之前的dp[t+1]大?如果大就更新。依次遍历递推,直至结束。值得思考是的,仔细观察递推公式:dp[t+1] = max(dp[t+1], dp[t] + arr[i])你会发现,无论更新与否,dp[t+1] 始终代表的是第 t+1 次加油。

Python3实现:

# @Time   :2018/7/25
# @Author :Yinxing
# 动态规划 时间复杂度 O(N^2K) 空间复杂度 O(N)class Solution:def minRefuelStops(self, target, startFuel, stations):dp = [startFuel] + [0] * len(stations)  # 初始化dpfor i, (loc, cap) in enumerate(stations):  # 遍历加油站for t in range(i, -1, -1):if dp[t] >= loc:  # 如果 第 t 加油后,可以到达 当前加油站的位置。dp[t+1] = max(dp[t+1], dp[t] + cap)  # 尝试的更新dpfor i, d in enumerate(dp):  # 遍历出最小次数if d >= target: return ireturn -1if __name__ == '__main__':solu = Solution()target, startFuel, stations = 100, 10, [[10, 60], [20, 30], [30, 30], [60, 40]]print(solu.minRefuelStops(target, startFuel, stations))

欢迎指正哦。

LeetCode:871. Minimum Number of Refueling Stops - Python相关推荐

  1. LeetCode刷题:871. Minimum Number of Refueling Stops

    LeetCode刷题:871. Minimum Number of Refueling Stops 原题链接:https://leetcode.com/problems/minimum-number- ...

  2. 算法练习14:leetcode习题871. Minimum Number of Refueling Stops

    文章目录 题目 算法思路 C++代码 题目 A car travels from a starting position to a destination which is target miles ...

  3. 【LeetCode】871. Minimum Number of Refueling Stops 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 贪心算法 日期 题目地址:https://leetc ...

  4. 【Leetcode】871. Minimum Number of Refueling Stops

    题目地址: https://leetcode.com/problems/minimum-number-of-refueling-stops/description/ 有一个小车,初始位置在 0 0 0 ...

  5. [LeetCode] 871. Minimum Number of Refueling Stops @ python

    一.题目: 初始油量startFuel,给一个到达目的地所需的油量target,还有沿途的加油站stations(包括到达加油站所需油量以及储备的油量),求达到目的地所需的最少加油次数,如果到不了返回 ...

  6. LeetCode 871. Minimum Number of Refueling Stops 最少加油次数

    LeetCode 871. Minimum Number of Refueling Stops 本题是LeetCode 871题,最少加油次数. 题目描述 A car travels from a s ...

  7. LeetCode: 871. Minimum Number of Refueling Stops

    LeetCode: 871. Minimum Number of Refueling Stops 题目描述 A car travels from a starting position to a de ...

  8. 871. Minimum Number of Refueling Stops

    题目: A car travels from a starting position to a destination which is target miles east of the starti ...

  9. [LeetCode] 871. Minimum Number of Refueling Stops

    题:https://leetcode.com/problems/minimum-number-of-refueling-stops/ 题目大意 起点有油 startFuel 的车,想行驶到 终点 ta ...

最新文章

  1. python游戏编程入门书籍推荐-游戏编程入门书籍推荐:想要游戏编程尽快入门这些书不要错过...
  2. python如何在循环中保存文件_python-如何在for循环中更改为另一行文件
  3. 理解SQL SERVER中非聚集索引的覆盖,连接,交叉和过滤
  4. Hive的基本操作-自定义函数
  5. 2012三年大专计算机试题医学,计算机原理2012年4月真题(02384)
  6. w10恢复出厂设置_路由器如何恢复出厂设置
  7. python基础之元组定义进阶操作、字典定义进阶操作
  8. python的range和linspace
  9. 强化学习推荐系统_推荐人系统:价值调整,强化学习和道德规范
  10. Microsoft visual FoxPro使用教程--添加csv文件数据到dbf文件中
  11. 19寸宽屏液晶显示器的设置 有效保护视力
  12. 关于跨平台 UI 的思考
  13. GDOI2018滚粗记
  14. 全排列算法(字典序法、SJT Algorithm 、Heap's Algorithm)
  15. Swipe轮播插件的使用
  16. 安装步骤_Saber 2016 安装步骤
  17. 【C++/CPP】OpenCV丨2. 常用操作丨1. 创建Mat丨
  18. Android压缩图片并且保存到本地内存卡中
  19. 操作系统实验二:物理内存管理系统
  20. SAP物料凭证中的凭证类型交易/事件

热门文章

  1. SDUT 来淄博旅游
  2. 地址栏中输入网址后发生了什么?
  3. ai若无声,我宁沉默夜寂无声,伊人浅唱。
  4. Centos8安装完mysql
  5. Spring 编程式事务实例
  6. grid选择框 jeeplus ani框架
  7. Android AccountManager帐号管理(一)
  8. 视频剪辑,大师珍藏的素材都在这里!
  9. WAP(手机网站)基础知识
  10. CSS 入门2(样式属性+元素溢出+显示特性+盒子模型)