Gas Station|leetcode 贪心
贪心:尽量将gas[i]-cost[i]>0的放在前面,gas[i]-cost[i]<0的放在后面。(路程的前面有汽油剩下,耗汽油的放在路程的后面)。
能否全程通过的 条件 是:sum(gas[i])>=sum(cost[i]),不满足这个条件就不能全程走一遍;
起点 i 满足的 必要 条件 是:额外剩下的gas(additional_gas)要大于等于0,即 gas[i]-cost[i]>=0;
另外需满足:
找出某站点 i_save ,经过这个站点剩下的gas最多,找出某站点 i_need ,经过这个站点所欠的gas最多,
“额外需要gas最多的站点”应该放在最后,“额外剩下gas最多的站点”应该放首位,优先将“额外剩下gas最多的站点”放首位;
如果 “额外需要gas最多的i”>“额外剩下gas最多的i”(-additional_gas[need]>=additional_gas[save]),则将“额外需要gas最多的i”放在最后。
如果“额外需要gas最多的i”和“额外剩下gas最多的i”有不止一个,则“额外需要gas最多的i”取最后一个,“额外剩下gas最多的i”取最前面那个。
例如:
i | 0 | 1 | 2 | 3 | 4 |
gas | 1 | 2 | 3 | 4 | 5 |
cost | 3 | 4 | 5 | 1 | 2 |
additional_gas | -2 | -2 | -2 | 3 | 3 |
起始站点为i=3。
自认为是比较简洁的代码:
class Solution:
# @param gas, a list of integers
# @param cost, a list of integers
# @return an integer
def canCompleteCircuit(self, gas, cost):
additional_gas=[]
for i in range(len(gas)):
additional_gas.append(gas[i]-cost[i])
if sum(additional_gas)<0:
return -1
need=0
save=0
for i in range(len(gas)):
if additional_gas[i]>0 and additional_gas[i]>additional_gas[save]:
save=i
if additional_gas[i]<0 and additional_gas[i]<=additional_gas[need]:
if i<len(gas)-1 and additional_gas[i+1]>0:
need=i
if -additional_gas[need]>additional_gas[save]:
return need+1
else:
return save if __name__ == '__main__':
s=Solution()
print(s.canCompleteCircuit([6,1,2,3,2,1,8],[1,7,2,2,2,8,1]))
下面的代码也能通过。
class Solution:
# @param gas, a list of integers
# @param cost, a list of integers
# @return an integer
def canCompleteCircuit(self, gas, cost):
additional_gas=[]
for i in range(len(gas)):
additional_gas.append(gas[i]-cost[i])
if sum(additional_gas)<0:
return -1
start=0
for i in range(1,len(gas)):
if (additional_gas[i]>=0 and additional_gas[i-1]<0):
start=i
return start
Gas Station|leetcode 贪心的更多相关文章
- 134. Gas Station leetcode
134. Gas Station 不会做. 1. 朴素的想法,就是针对每个位置判断一下,然后返回合法的位置,复杂度O(n^2),显然会超时. 把这道题转化一下吧,求哪些加油站不能走完一圈回到自己,要求 ...
- Gas Station [LeetCode]
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...
- Gas Station——LeetCode
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...
- Gas Station leetcode java
题目: There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. ...
- Gas Station [leetcode] 两个解决方案
因为gas的总数大于cost总时间.你将能够圈住整个城市. 第一溶液: 如果一開始有足够的油.从位置i出发.到位置k时剩余的油量为L(i,k). 对随意的k.L(i,k)依据i的不同,仅仅相差常数. ...
- [LeetCode] Gas Station 贪心
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...
- 贪心:leetcode 870. Advantage Shuffle、134. Gas Station、452. Minimum Number of Arrows to Burst Balloons、316. Remove Duplicate Letters
870. Advantage Shuffle 思路:A数组的最大值大于B的最大值,就拿这个A跟B比较:如果不大于,就拿最小值跟B比较 A可以改变顺序,但B的顺序不能改变,只能通过容器来获得由大到小的顺 ...
- LeetCode: Gas Station 解题报告
Gas Station There are N gas stations along a circular route, where the amount of gas at station i is ...
- [LeetCode 题解]:Gas Station
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 There are ...
随机推荐
- 自定义cell相关注意事项
1.拖线成功后,如果又在.h文件或者.m文件里面删除了对应的属性或者方法.一定要在xib文件中,删除关联.方法是:右键点击一下对应的UI控件,把多余的关联叉掉就行了. 不然容易崩溃.
- webviewactivity
WebView注意点,注释里有说明 package com.example.suneyaenews; import com.example.http.HttpThread; import androi ...
- [mysql]子查询与连接
1,子查询(Subquery)是指出现在其他 SQL 语句内的select子句 例如: select * from t1 where col1 = (select col2 from t2); 其中 ...
- qstring.h赏析
https://github.com/qtproject/qtbase/blob/dev/src/corelib/tools/qstring.h C:\Qt\Qt5.3.2_min\5.3\mingw ...
- Runtime.getRuntime().exec(...)使用方法
Runtime.getRuntime().exec(...)使用方法 如果想要了解更多的信息,参阅代码里面给的链接 下面是这个正确的例子 public class RuntimeExec { /** ...
- Android抖动动画
//CycleTimes动画重复的次数 public Animation shakeAnimation(int CycleTimes) { Animation translateAnimation = ...
- Windows failed to start.界面下修复win8引导
首先要保证 系统本身是没有问题的 不是在装机的时候出现这种情况 那么可以按照以下方法来进行 首先要在另外一台电脑上将win8刻进u盘 启动时以u盘为第一启动项启动 进入win8装机界面 点击左下角的修 ...
- 如何快速方便的输出向量vector容器中不重复的内容
在vector容器中,存入的内容难免会出现重复,那么如何快速输出或提前非重复的那些数据呢,即重复的数据只输出一次,直观的方法是每次输出都要通过循环比较是否已经输出过,这种方法还是比较费时的,可以利用u ...
- SRBF Lighting
SRBF的全称是Spherical Radial Basis Function,笔者擅自翻译为球面放射基底函数.由于SRBF并不怎么出名,相对来说,SH(Spherical Harmonic)球 ...
- android在ubuntu中编译为.apk资料
android在ubuntu中编译为.apk文件 今天我在ubuntu环境之下将android程序编译为.apk文件,特将其过程写下来: 1. 在windows环境下使用MyEclipse编辑好and ...