217.贪心算法:加油站(力扣)

代码解决

cpp 复制代码
class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) 
    {
        int curtotol = 0; // 当前累积油量
        int tatol = 0; // 总的油量减去总的花费油量
        int start = 0; // 起始加油站的索引

        // 遍历所有加油站
        for (int i = 0; i < gas.size(); i++)
        {
            curtotol += gas[i] - cost[i]; // 计算当前累积油量
            tatol += gas[i] - cost[i]; // 计算总的油量减去总的花费油量

            // 如果当前累积油量小于0,则无法到达下一个加油站
            if (curtotol < 0)
            {
                start = i + 1; // 重置起点为下一个加油站
                curtotol = 0; // 重置当前累积油量
            }
        }

        // 如果总的油量小于总的花费油量,则无法完成环路
        if (tatol < 0) return -1;

        // 返回起始加油站的索引
        return start;
    }
};

核心思想

  1. 遍历每个加油站
    • 计算从当前起点开始的累积油量。如果累积油量不足以到达下一个加油站,则从下一个加油站重新开始。
    • 如果总的油量 tatol 小于总的花费油量,说明无论从哪个加油站出发都无法绕环路一周,直接返回 -1
    • 否则,返回最后一次重置起点的位置 start

假设 gas = [1, 2, 3, 4, 5]cost = [3, 4, 5, 1, 2]

  1. 遍历加油站:

    • 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
  2. 最终 tatol >= 0,返回 start = 3

相关推荐
一只码代码的章鱼31 分钟前
粒子群算法 笔记 数学建模
笔记·算法·数学建模·逻辑回归
小小小小关同学31 分钟前
【JVM】垃圾收集器详解
java·jvm·算法
Swift社区35 分钟前
统计文本文件中单词频率的 Swift 与 Bash 实现详解
vue.js·leetcode·机器学习
圆圆滚滚小企鹅。36 分钟前
刷题笔记 贪心算法-1 贪心算法理论基础
笔记·算法·leetcode·贪心算法
Kacey Huang1 小时前
YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战第十三天|YOLOv3实战、安装Typora
人工智能·算法·yolo·目标检测·计算机视觉
eguid_11 小时前
JavaScript图像处理,常用图像边缘检测算法简单介绍说明
javascript·图像处理·算法·计算机视觉
带多刺的玫瑰1 小时前
Leecode刷题C语言之收集所有金币可获得的最大积分
算法·深度优先
LabVIEW开发2 小时前
PID控制的优势与LabVIEW应用
算法·labview
涅槃寂雨2 小时前
C语言小任务——寻找水仙花数
c语言·数据结构·算法
就爱学编程2 小时前
从C语言看数据结构和算法:复杂度决定性能
c语言·数据结构·算法