【题目描述】
在一条环路上有 n
个加油站,其中第 i
个加油站有汽油 gas[i]
升。
你有一辆油箱容量无限的的汽车,从第 i
个加油站开往第 i+1
个加油站需要消耗汽油 cost[i]
升。你从其中的一个加油站出发,开始时油箱为空。
给定两个整数数组 gas
和 cost
,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1
。如果存在解,则 保证 它是 唯一 的。
https://leetcode.cn/problems/gas-station/description/
【示例】
【代码】图像解法
package com.company;
// 2023-03-27
import java.util.*;
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int len = gas.length;
int sum = 0;
int min = 0;
int index = 0;
for (int i = 0; i < len; i++){
sum += gas[i];
sum -= cost[i];
if (sum < min){
// 经过第 i 个站点后,使 sum 到达新低
// 所以站点 i + 1 就是最低点(起点)
index = i + 1;
min = sum;
}
}
if (sum < 0) return -1;
return index == len ? 0 : index;
}
}
public class Test {
public static void main(String[] args) {
new Solution().canCompleteCircuit(new int[]{1,2,3,4,5}, new int[]{3,4,5,1,2}); // 输出: 3
new Solution().canCompleteCircuit(new int[]{2,3,4}, new int[]{3,4,3}); // 输出: -1
}
}
【代码】贪心算法
https://leetcode.cn/problems/gas-station/solutions/488357/jia-you-zhan-by-leetcode-solution/