贪心算法:加油站 ⛽
隔了一段时间后,来重新训练贪心算法,看看自己的速度是否提升,结果还是不错,leetcode
上同样难度的贪心算法解题思路和速度都比之前快了些。
加油站
题目地址: https://leetcode-cn.com/problems/gas-station/
题目描述:
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。
说明:
如果题目有解,该答案即为唯一答案。
输入数组均为非空数组,且长度相同。
输入数组中的元素均为非负数。
示例
题目分析
本题我在看来,第一印象与当初做过的一道《两地调度》问题很像,都是贪心算法
在加油站油量和消耗两个数组比较时可以进行相减,得到一个新的数组,想到于在此加油站时油箱到底是负还是正
当然,即使此时的新数组重新累加,如果总和小于 0,即为无法走完一圈,可以返回-1。
不过这样还有一个问题,那就是可以走完,如何得到起始点的位置。
这里我在数组遍历循环时,设置一个总数 total,total 从第一个值开始累加,如果出现 total 为负,记录下此时的 total 到 lastTotal 中和将 index 记录到 firstZ,将 total 重新置为 0,然后继续走,再次为负,lastTotal 累加,调整 firstZ 为最新的 index。
当数组遍历完毕后,将最后的 total 和 lastTotal 相加,就是数组的总和。总和大于等于 0,并且 lastTotal 为 0,那么说明从第一个值就可以走完。否则起始点位置就是 firstZ + 1.
版权声明: 本文为 InfoQ 作者【空城机】的原创文章。
原文链接:【http://xie.infoq.cn/article/4f75483e8acd5dd26aadef1e8】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论