題目:
在一條環路上有 n 個加油站,其中第 i 個加油站有汽油 gas[i] 公升。
你有一輛油箱容量無限的的汽車,從第 i 個加油站開往第 i+1 個加油站需要消耗汽油 cost[i] 公升。你從其中的乙個加油站出發,開始時油箱為空。
如果你可以繞環路行駛一周,則返回出發時加油站的編號,否則返回 -1。
思路一:
設定乙個remain值來判斷,當前油量是否足夠行駛到下一站。
解答一:
class
solution
:def
cancompletecircuit
(self, gas: list[
int]
, cost: list[
int])-
>
int:
n=len(gas)
remains=[0
]*nfor i in
range
(n):
remains[i]
=gas[i]
-cost[i]
print
(remains)
for i in
range
(n):
m=n-
1#在i號加油站加的油,足夠汽車行駛到(i+1)號加油站
if remains[i]
>=
0: #行駛到(i+1)%n 號加油站時,郵箱裡剩餘的油量
remain=remains[i]
j=i+
1while m:
#油量不足以支撐汽車行駛到下一站
if remains[j%n]
+remain<0:
break
#油量足以支撐汽車行駛到下一站,更新剩餘油量值
else
: remain+=remains[j%n]
j+=1 m-=
1#若汽車可以回到原點,即i號加油站
if m==0:
return i
return
-1
思路二:start和end設定得很精妙!
解答二:
class
solution
:def
cancompletecircuit
(self, gas: list[
int]
, cost: list[
int])-
>
int:
end =
0 start =
len(gas)-1
sum = gas[start]
- cost[start]
while start > end:
if sum >=0:
sum += gas[end]
- cost[end]
end +=
1else
: start -=
1 sum += gas[start]
- cost[start]
return start if sum>=
0else
-1
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...
LeetCode每日一題(題139)
題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...