【题目描述】

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

https://leetcode.cn/problems/gas-station/description/


【示例】

【LeeCode】134. 加油站_数组



【代码】图像解法

【LeeCode】134. 加油站_数组_02

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/


https://leetcode.cn/problems/gas-station/solutions/858280/dai-ma-sui-xiang-lu-dai-ni-xue-tou-tan-x-f3cv/