4/13/2014

Leetcode -- Gas Station

Time Limit Exceeded:
 
class Solution {  
 public:  
   int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {  
     int n = gas.size();  
     for(int i = 0; i < n; ++i) {  
       bool canGo = true;  
       int gs = 0;  
       for(int j = i; j < n; ++j) {  
         gs += gas[j];  
         if(cost[j] > gs) {  
           canGo = false;  
           break;  
         } else {  
           gs -= cost[j];  
         }  
       }  
       for(int j = 0; j < i; ++j) {  
         gs += gas[j];  
         if(cost[j] > gs) {  
           canGo = false;  
           break;  
         } else {  
           gs -= cost[j];  
         }  
       }  
       if(canGo) {  
         return i;  
       }  
     }    
     return -1;  
   }  
 };  
Need to review
class Solution {  
 public:  
   int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {  
     int n = gas.size();  
     vector<int> diff;  
     for(int i = 0; i < n; ++i) {  
       diff.emplace_back(gas[i] - cost[i]);  
     }  
     int sum = 0, left = 0, start = 0;  
     for(int i = 0; i < n; ++i) {  
       sum += diff[i];  
       left += diff[i];  
       if(sum < 0) {  
         start = i+1;  
         sum = 0;  
       }  
     }  
     if(left < 0) {  
       return -1;  
     } else {  
       return start;  
     }  
   }  
 };  

No comments: