134. 加油站(贪心算法)

根据题解

这道题使用贪心算法,找到当前可解决问题的状态即可

「贪心算法」的问题需要满足的条件:

  1. 最优子结构:规模较大的问题的解由规模较小的子问题的解组成,规模较大的问题的解只由其中一个规模较小的子问题的解决定;
  2. 无后效性:后面阶段的求解不会修改前面阶段已经计算好的结果;
  3. 贪心选择性质:从局部最优解可以得到全局最优解。

如果要求走一圈,则总剩余油量total应该大于等于0

而在每个站点的时候,当前剩余油量curr如果大于等于0,代表可以到达下一个站点,如果小于0,代表从当前及之前的站点出发无法到达下一个站点,于是出发点改为下一个站点。

为什么说当前及之前的站点出发都无法到达下一个站点呢?

参考这个题解的图:

可以看到,假设start已经更改为3之后,可以到达4,假设到下一个节点时,cursum变成了负数,而在这之前的两个站点的cursum都是正数,代表它俩的加和都不够,更别提其中一个了 ,所以start会跳过4,更新为i+1

cpp 复制代码
class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int n = gas.size();
        int start = 0;
        int curr = 0;
        int total = 0;
        for (int i = 0; i < n; ++i) {
            curr += gas[i] - cost[i];
            total += gas[i] - cost[i];
            if (curr < 0) {
                start = i + 1;
                curr = 0;
            }
        }
        return total >= 0 ? start : -1;
    }
};
相关推荐
GoCoding2 小时前
YOLO-Master 与 YOLO26 开始
算法
VALENIAN瓦伦尼安教学设备2 小时前
设备对中不良的危害
数据库·嵌入式硬件·算法
不熬夜的熬润之2 小时前
APCE-平均峰值相关能量
人工智能·算法·计算机视觉
yzx9910132 小时前
实时数据流处理实战:从滑动窗口算法到Docker部署
算法·docker·容器
佩奇大王3 小时前
P674 三羊献瑞
算法·深度优先·图论
发疯幼稚鬼3 小时前
大整数乘法运算
c语言·算法
宵时待雨4 小时前
C++笔记归纳17:哈希
数据结构·c++·笔记·算法·哈希算法
问好眼4 小时前
《算法竞赛进阶指南》0x05 排序-1.电影
c++·算法·排序·信息学奥赛
CoderCodingNo4 小时前
【GESP】C++八级考试大纲知识点梳理 (6) 图论算法:最小生成树与最短路
c++·算法·图论
DeepModel4 小时前
【特征选择】嵌入法(Embedded)
人工智能·python·深度学习·算法