217.贪心算法:加油站(力扣)
代码解决
class Solution { public: int canCompleteCircuit(vector& gas, vector& cost) { int curtotol = 0; // 当前累积油量 int tatol = 0; // 总的油量减去总的花费油量 int start = 0; // 起始加油站的索引 // 遍历所有加油站 for (int i = 0; i核心思想
- 遍历每个加油站:
- 计算从当前起点开始的累积油量。如果累积油量不足以到达下一个加油站,则从下一个加油站重新开始。
- 如果总的油量 tatol 小于总的花费油量,说明无论从哪个加油站出发都无法绕环路一周,直接返回 -1。
- 否则,返回最后一次重置起点的位置 start。
假设 gas = [1, 2, 3, 4, 5] 和 cost = [3, 4, 5, 1, 2]:
遍历加油站:
- i = 0: curtotol = 1 - 3 = -2, tatol = -2, start = 1, curtotol = 0
- i = 1: curtotol = 2 - 4 = -2, tatol = -4, start = 2, curtotol = 0
- i = 2: curtotol = 3 - 5 = -2, tatol = -6, start = 3, curtotol = 0
- i = 3: curtotol = 4 - 1 = 3, tatol = -3
- i = 4: curtotol = 5 - 2 = 6, tatol = 0
最终 tatol >= 0,返回 start = 3。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。