贪心思路一 §

func canCompleteCircuit(gas []int, cost []int) int {
sum := 0
minSum := 0
for i := 0; i < len(gas); i++ {
diff := gas[i] - cost[i]
sum += diff
if sum < minSum {
minSum = sum
}
}
if sum < 0 {
return -1
}
if minSum >= 0 {
return 0
}
for i := len(gas) - 1; i >= 0; i-- {
diff := gas[i] - cost[i]
minSum += diff
if minSum >= 0 {
return i
}
}
return -1
}
贪心思路二 §

func canCompleteCircuit(gas []int, cost []int) int {
totalSum := 0
curSum := 0
idx := 0
for i := 0; i < len(gas); i++ {
curSum += gas[i] - cost[i]
if curSum < 0 {
totalSum += curSum
curSum = 0
idx = i + 1
}
}
totalSum += curSum
if totalSum < 0 {
return -1
}
return idx
}