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

相关推荐
V搜xhliang024619 分钟前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
汉克老师34 分钟前
GESP2025年3月认证C++五级( 第三部分编程题(2、原根判断))
c++·算法·模运算·gesp5级·gesp五级·原根·分解质因数
数据皮皮侠1 小时前
上市公司创新韧性数据(2000-2024)|顶刊同款 EIR 指数
大数据·人工智能·算法·智慧城市·制造
WL_Aurora1 小时前
Python 算法基础篇之链表
python·算法·链表
科研前沿1 小时前
纯视觉无感解算 + 动态数字孪生:室内外无感定位技术全新升级
大数据·人工智能·算法·重构·空间计算
Wadli2 小时前
26.单调栈
算法
晨曦夜月2 小时前
进程的五大状态及特殊进程解析
linux·服务器·算法
吟安安安安2 小时前
适合短期冲刺的学习工作流(针对算法)
学习·算法
科研前沿2 小时前
什么是时空融合技术?
大数据·人工智能·数码相机·算法·重构·空间计算
AI科技星2 小时前
全域数学本源公理:0、1、∞ 三者核心关系 (典籍定稿版)
人工智能·算法·数学建模·数据挖掘·量子计算