class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param gas int整型vector 
     * @param cost int整型vector 
     * @return int整型
     */
    // 贪心法
    int gasStation(vector<int>& gas, vector<int>& cost) {
        int n = gas.size();
        int res = 0, sum = 0, start = 0;
        
        for(int i=0; i<n; i++){
            res += gas[i] - cost[i];
            sum += gas[i] - cost[i];
            if(res < 0){
                start = (i+1)%n;
                res = 0;
            }
        }
        
        return sum >= 0 ? start : -1;
    }
    /*
    // 遍历所有起始点
    int gasStation(vector<int>& gas, vector<int>& cost) {
        // write code here
        int n = gas.size();
        int res;
        for(int i=0; i<n; i++){
            int cur = 0;
            res = gas[i];
            int start = i;
            while(res > 0){
                res = res - cost[(start % n)];
                if(res < 0){
                    break;
                }
                cur += 1;
                res += gas[(start + 1)%n];
                if(cur == n){
                    return i;
                }
                start += 1;
            }
        }
        
        return -1;
    }
    */
};