- 加油,加油,只有有油才能前行
- 所以要计算在每个加油站加完油后,到下一站前消耗油后,还能有剩余,才可以
- 如果没有剩余,起始站点就要更换为不能到达站点的下一个站点,作为起始站点
- 只有这样才有可能跑完所有加油站
- 记住,只要循环一遍,而且总耗油量不是小于0,就说明可以找到这么个起点,这一点是颠覆认知的
#include <iostream>
#include <vector>
class Solution {
public:
int canCompleteCircuit(std::vector<int>&gas, std::vector<int>& cost) {
int current_sum = 0, total_sum = 0, start = 0;
for (int i = 0; i < gas.size(); ++i) {
current_sum += gas.at(i) - cost.at(i);
total_sum += gas.at(i) - cost.at(i);
if (current_sum < 0) {
start = i + 1;
current_sum = 0;
}
}
if (total_sum < 0)
return -1;
return start;
}
};
int main()
{
std::vector<int> gas {2, 3, 4};
std::vector<int> cost {3, 4, 3};
Solution s;
std::cout << s.canCompleteCircuit(gas, cost) << std::endl;
return 0;
}