本文共 1544 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要找到一个加油站作为起点,使得从该起点出发,车辆可以沿着环形路线完成一圈而不中途停车。我们需要计算整个环路的总油量变化,并确保在每个阶段油量变化不为负,同时总油量变化足够。
sum_total。如果 sum_total 小于零,显然无法完成环路,直接返回 -1。sum_total 且在每个阶段油量变化不为负,则该起点是答案。#includeusing namespace std;int canCompleteCircuit(vector & gas, vector & cost) { int n = gas.size(); int sum_total = 0; for (int i = 0; i < n; ++i) { sum_total += gas[i] - cost[i]; } if (sum_total < 0) { return -1; } for (int i = 0; i < n; ++i) { int current = 0; bool canComplete = true; for (int j = i; j < n; ++j) { current += gas[j] - cost[j]; if (current < 0) { canComplete = false; break; } } if (!canComplete) { continue; } for (int j = 0; j < i; ++j) { current += gas[j] - cost[j]; if (current < 0) { canComplete = false; break; } } if (canComplete && current == sum_total) { return i; } } return -1;}
sum_total。sum_total 小于零,直接返回 -1。sum_total,则返回该起点的下标。这种方法确保了我们能够在每个阶段检查油量变化,并且在整个环路中确保总油量变化满足要求,从而找到正确的起点。
转载地址:http://ufdg.baihongyu.com/