NC235. 加油站
描述
示例1
输入:
[1,2,3,4,5],[3,4,5,1,2]
输出:
3
说明:
只能从下标为 3 的加油站开始完成 (即第四个加油站)示例2
输入:
[0,10],[9,1]
输出:
1
示例3
输入:
[2,3,4],[3,4,5]
输出:
-1
说明:
无论从哪个加油站出发都无法环绕环道一圈C++ 解法, 执行用时: 14ms, 内存消耗: 3724KB, 提交时间: 2022-06-08
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cout.tie(nullptr); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: int gasStation(vector<int>& gas, vector<int>& cost) { int curSum=0; int min=INT_MAX; for(int i=0;i<gas.size();i++) { int rest=gas[i]-cost[i]; curSum+=rest; if(curSum<min) min=curSum; } if(curSum<0) return -1; if(min>=0) return 0; for(int i=gas.size()-1;i>=0;i--) { int rest=gas[i]-cost[i]; min+=rest; if(min>=0) return i; } return -1; } };
C++ 解法, 执行用时: 18ms, 内存消耗: 4308KB, 提交时间: 2022-01-22
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param gas int整型vector * @param cost int整型vector * @return int整型 */ int gasStation(vector<int>& gas, vector<int>& cost) { int start = 0; int total = 0; int current = 0; for (int i = 0; i < gas.size(); ++i) { current += (gas[i] - cost[i]); total += (gas[i] - cost[i]); if (current < 0) { start = i + 1; current = 0; } } if (total >= 0) { return start; } else { return -1; } } };
C++ 解法, 执行用时: 19ms, 内存消耗: 3760KB, 提交时间: 2022-02-03
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param gas int整型vector * @param cost int整型vector * @return int整型 */ int gasStation(vector<int>& gas, vector<int>& cost) { // write code here int ans = 0; //当前剩余油量,若为0则continue; int start = 0; //起始站 int sum = 0; //走完一圈的剩余油量 for(int i = 0; i < gas.size(); i++){ ans += gas[i] - cost[i]; sum += gas[i] - cost[i]; if(ans < 0){ ans = 0; start = (i + 1) % gas.size(); } } if(sum >= 0) return start; return -1; } };
C++ 解法, 执行用时: 19ms, 内存消耗: 3804KB, 提交时间: 2022-01-09
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param gas int整型vector * @param cost int整型vector * @return int整型 */ int gasStation(vector<int>& gas, vector<int>& cost) { // write code here int gasSum = 0; int costSum = 0; int curr = 0; int minVal = 0; int minIndex = 0; for (int i = 0; i < gas.size(); ++i) { gasSum += gas[i]; costSum += cost[i]; curr += gas[i] - cost[i]; if (curr < minVal) { minVal = curr; minIndex = i; } } if (gasSum < costSum) { return -1; } return minIndex + 1; } };
C++ 解法, 执行用时: 19ms, 内存消耗: 3808KB, 提交时间: 2021-12-20
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param gas int整型vector * @param cost int整型vector * @return int整型 */ int gasStation(vector<int>& gas, vector<int>& cost) { // write code here int curSum = 0; int totalSum = 0; int start = 0; for(int i = 0; i < gas.size(); i++){ curSum += gas[i] - cost[i]; totalSum += gas[i] - cost[i]; if(curSum < 0){ start = i + 1; curSum = 0; } } if(totalSum < 0) return -1; return start % gas.size(); } };