LinCode_187 Gas Station

来源:互联网 发布:丁丁装修软件 编辑:程序博客网 时间:2024/06/11 20:44

There are N gas stations along a circular route, where the amount of gas at station i isgas[i].

You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from station i to its next station (i+1). You begin the journey with an empty tank at one of the gas stations.

Return the starting gas station's index if you can travel around the circuit once, otherwise return -1.

 Notice

The solution is guaranteed to be unique.

Example

Given 4 gas stations with gas[i]=[1,1,3,1], and the cost[i]=[2,2,1,1]. The starting gas station's index is 2.

Challenge 

O(n) time and O(1) extra space


思路是如果所有的和大于0的话,肯定有一段的和大于0, 找到那一段就行了。如果负的中间有正的一小段, 不用担心后面那段负的肯定会把正的抵消掉。所以找到的那段正的就是最大的那段。

class Solution {public:    /**     * @param gas: a vector of integers     * @param cost: a vector of integers     * @return: an integer      */    int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {        // write your code here        if(gas.size() == 0 || cost.size() == 0 || gas.size() != cost.size()) return -1;        int total = 0, sum = 0, start = 0;        for(int i = 0; i < gas.size(); ++i){            total += (gas[i] - cost[i]);            if(sum < 0){ //发现油箱空了,从下一个站点尝试                sum = (gas[i] - cost[i]);                start = i;            }else                sum += (gas[i] - cost[i]);        }        return total < 0 ? -1 : start; //用total判断start 是否是满足要求的解    }    };




0 0
原创粉丝点击