class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param gas int整型vector 
     * @param cost int整型vector 
     * @return int整型
     */
    int gasStation(vector<int>& gas, vector<int>& cost) {
        // write code here
        int n = gas.size();
        int total_tank = 0, curr_tank = 0;
        int starting_station = 0;

        for (int i = 0; i < n; ++i) {
            total_tank += gas[i] - cost[i];
            curr_tank += gas[i] - cost[i];

            // 如果当前累积油量小于 0,说明从 starting_station 到 i 无法完成,需要重新设定起点
            if (curr_tank < 0) {
                starting_station = i + 1; // 新的起点放在 i 后面
                curr_tank = 0; // 油箱油量重置
            }
        }
        
        // 如果总油量大于等于总耗油量,说明可以完成一圈
        return total_tank >= 0 ? starting_station : -1;
    }
};