我的代码,一直有点问题
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int n = gas.size();
vector<int> diff(n, 0);
for (int i = 0; i < n; i++){
diff[i] = gas[i] - cost[i];
}
int sum = accumulate(diff.begin(), diff.end(), 0);
if (sum >= 0){
if (n == 1)
return 0;
for (int i = 0; i < n; i++){
if (diff[i] > 0){
if (i < n-1 && diff[i] + diff[i+1] >= 0){
return i;
}else if(i == n-1){
return n-1;
}
}
}
//return i = (max_element(diff.begin(), diff.end()) - diff.begin());
}
return -1;
}
};
这个测试用例真的搞不掂
[67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66]
[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]
关于如何找起始位置我没有想明白,关于判断能不能走完一圈倒是想明白了。
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int curSum = 0;
int totSum = 0;
int start = 0;
for (int i = 0; i < gas.size(); i++){
totSum += (gas[i] - cost[i]);
curSum += (gas[i] - cost[i]);
if (curSum < 0){
start = i+1;
curSum = 0;
}
}
if (totSum < 0){
return -1;
}
return start;
}
};
我的范围判断局限了,我只判断了两个,其实是从这一点开始之后都需要判断。