class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
// [1,2,3,4,5]
// [3,4,5,1,2]
// [-2,-2,-2,3,3]
vector<int> inc(cost.size(), 0);
int sum = 0;
for(int i = 0; i < cost.size(); i++) {
inc[i] = gas[i] - cost[i];
sum += inc[i];
}
if(sum < 0) return -1;
int cur = 0, mx = 0, pos = 0, last= 0;
for(int i = 0; i < inc.size(); i++) {
if(!i) {
cur = inc[i];
mx = inc[i];
pos = last = 0;
} else {
if(inc[i] > cur + inc[i]) {
// pos = i;
last = i;
cur = inc[i];
if(cur > mx) {
pos = i;
}
} else {
cur = cur+inc[i];
}
mx = max(mx, cur);
// cur = max(cur+inc[i], inc[i]);
// if(cur + inc)
// if(cur > mx) {
// pos = i;
// }
}
}
cout << "last:" << last << " pos:" << pos << endl;
int i ;
for( i = 0; i < last; i++) {
if(cur + inc[i] > inc[i]) {
cur += inc[i];
} else {
break;
}
}
if(cur >= 0 && i == last) {
pos = last;
}
return pos;
}
};
按照最大连续子序列的和写 可能更容易理解一些 ,具体如上,区别是,如果遍历到数组最后,需要从头开始继续看下