leetcode-gas station(2014.2.21)

来源:互联网 发布:java 函数式编程 编辑:程序博客网 时间:2024/06/07 06:57
暴力的方法需要O(n*n)的时间复杂度,即挨个使每个加油站作为起点,进行尝试。
改进的方法:先要对整体进行判断,即加油站油总量大于需要消耗的油的总量,则一定可以。
每当累积的油量不足以消耗,则当从该站的下一站作为起点,也就是说,这样的站点,尽量放在后边。遍历一次即可。
class Solution {
public:
    int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
        int start=0;
        int gasSum=0;
        int costSum=0;
        int total=0;
        int sum=0;
        for(int i=0;i<gas.size();i++){
            gasSum+=gas[i];
            costSum+=cost[i];
        }
        if(gasSum<costSum) return -1;
        for(int i=0;i<gas.size();i++){
          sum+=gas[i]-cost[i];
            if(sum<0){
                start=(i+1)%cost.size(); sum=0;
            } 
        }
        return start;
    }
};
0 0
原创粉丝点击