134. Gas Station

来源:互联网 发布:淘宝信用贷款逾期20天 编辑:程序博客网 时间:2024/06/05 20:41

这道题是说,有N个加油站点构成一个环状,每个站点i加油量为gas[i],从站点i到站点i+1需要耗费有两为cost[i],现要求从哪个站点出发可以成功转一圈回到初始站点,返回该站点,若没有则返回-1;

一开始我用了暴力的方法,每一个节点作为起始的可能性都试一下。超时。然后看了别人的博客:

1 如果总的gas - cost小于零的话,那么没有解返回-1

2 如果前面所有的gas - cost加起来小于零,那么前面所有的点都不能作为出发点。

第一个好理解,第二个不太容易想,可以这样想:如果i到j个gas的和都大于i到j的cost的和,但是到了j+1发现不满足gas的和大于cost的和了。这时候不需要从i+1作为起始点开始找了,而是可以从j+1作为起始点开始找。因为从前面可知,gas[i]-cost[i]大于0的,所以经过第i个节点,剩下的油大于0,加上第i个节点的剩余量都没有用,如果不加第i个节点的剩余量,肯定更不行了。

class Solution {public:    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {        int sum = 0, tmp = 0, start = 0;        for(int i = 0; i < gas.size(); ++i){            sum += gas[i] - cost[i];            tmp += gas[i] - cost[i];            if(tmp < 0){                tmp = 0;                start = i+1;            }        }        if(sum < 0)            return -1;        return start;    }};


原创粉丝点击