leetcode-卡车加气走环

解析:

    a1 a2 a3 a4 a5 a6

    如果a1到a3总的加气-用气<0,那么a1,a2都不能用作起点,a3作为起点


//复杂度O(n)
class Solution {
public :
     int canCompleteCircuit(vector< int > &gas, vector< int > &cost) {
         //total记录全局是否有解,sum记录i到i+1是否可行
         int total = 0, sum = 0;
         int index = -1;
         for ( int i = 0; i < gas.size(); i++) {
             sum += gas[i] - cost[i];         //本次消耗
             total += gas[i] - cost[i];   //总消耗
             if (sum < 0) {
                 sum = 0;
                 index = i;     //记录解的位置
             }
         }
         return total >= 0 ? index + 1 : -1; //只要total>=0,肯定有解
     }
};

有一个没看到答案,记录下

从start出发, 如果油量足够, 可以一直向后走 end++;  油量不够的时候,
start向后退  最终 start == end的时候,如果有解一定是当前 start所在位置
class Solution {
public :   int canCompleteCircuit(vector< int > &gas, vector< int > &cost) {      
         int start = gas.size() - 1;
         int end = 0;
         int sum = gas[start] - cost[start];
         while (start > end){
             if (sum >= 0){
                 sum += gas[end] - cost[end];
                 ++end;
             } else {
                 --start;
                 sum += gas[start] - cost[start];
             }
         }
         return sum >=0 ? start : -1;
         
         
     }
};


猜你喜欢

转载自blog.csdn.net/asdasdasdasasd1111/article/details/80894922