class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int o = 0;
int s = gas.size();
int sumo = 0, sumc = 0;
for (int i = 0; i < s; i++) {
sumo += gas[i];
sumc += cost[i];
}
if (sumo < sumc)
return -1;
int tank = 0, co;
int flag = 1;
for (int i = 0; i < s; i++) {
flag = 1;
tank = gas[i];
for (int j = i, co = 0; co < s; co++, j++) {
tank -= cost[j];
if (tank < 0) {
flag = 0;
break;
}
if (j == s - 1)
j = -1;
tank += gas[j+1];
}
if (flag)
return i;
}
return -1;
}
};
暴力超时,有一条推导,x-y+z-j+i<w,且x-y>0,则z-j+i<w必然,推广开即a不能到b则ab中间一点也不能到b,可减少遍历
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int o = 0;
int s = gas.size();
int sumo = 0, sumc = 0;
for (int i = 0; i < s; i++) {
sumo += gas[i];
sumc += cost[i];
}
if (sumo < sumc)
return -1;
int tank = 0, co;
int flag = 1;
for (int i = 0; i < s; i++) {
flag = 1;
tank = gas[i];
for (int j = i, co = 0; co < s; co++, j++) {
tank -= cost[j];
if (tank < 0) {
flag = 0;
i=j;
break;
}
if (j == s - 1)
j = -1;
tank += gas[j+1];
}
if (flag)
return i;
}
return -1;
}
};