当前位置: 首页 > article >正文

算法-加油站问题

hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧!

在这里插入图片描述

function canCompleteCircuit(gas, cost) {
    // 加油站的总数
    const n = gas.length;
    // 记录总剩余油量,若总剩余油量小于 0,说明无法绕环路行驶一周
    let totalSurplus = 0;
    // 记录当前从起始点出发累计的剩余油量
    let currentSurplus = 0;
    // 记录可能的起始加油站编号,初始设为 0
    let start = 0;

    // 遍历每一个加油站
    for (let i = 0; i < n; i++) {
        // 计算从当前加油站出发到下一个加油站的剩余油量
        const surplus = gas[i] - cost[i];
        // 累加每一个加油站的剩余油量到总剩余油量中
        totalSurplus += surplus;
        // 累加从当前起始点出发到当前加油站的剩余油量
        currentSurplus += surplus;

        // 如果当前从起始点出发累计的剩余油量小于 0,说明从当前 start 出发无法继续行驶
        if (currentSurplus < 0) {
            // 则更新起始点为下一个加油站
            start = i + 1;
            // 并将当前累计的剩余油量重置为 0,准备从新的起始点开始计算
            currentSurplus = 0;
        }
    }

    // 如果总剩余油量小于 0,说明整体的汽油量不足以支持绕环路行驶一周
    if (totalSurplus < 0) {
        return -1;
    }
    // 否则,返回记录的起始加油站编号
    return start;
}

// 示例测试
const gas = [1, 2, 3, 4, 5];
const cost = [3, 4, 5, 1, 2];
console.log(canCompleteCircuit(gas, cost));

代码思路解释

初始化部分:
n:获取加油站的总数,用于后续的循环遍历。
totalSurplus:用来统计所有加油站的汽油量减去行驶消耗后的总剩余油量。如果这个值小于 0,说明无论从哪个加油站出发,都无法绕环路行驶一周。
currentSurplus:记录从当前假设的起始加油站出发,到当前遍历到的加油站时累计的剩余油量。
start:表示可能的起始加油站编号,初始从 0 号加油站开始尝试。

遍历加油站:
在循环中,对于每一个加油站,计算从该加油站出发到下一个加油站的剩余油量 surplus,即 gas[i] - cost[i]。
将这个剩余油量累加到 totalSurplus 中,以统计总的剩余油量情况。
同时也将其累加到 currentSurplus 中,以跟踪从当前假设的起始点出发的剩余油量变化。
若 currentSurplus 小于 0,意味着从当前假设的 start 出发无法到达下一个加油站,所以更新 start 为下一个加油站的编号 i + 1,并将 currentSurplus 重置为 0,重新开始从新的起始点计算剩余油量。

结果判断:
循环结束后,检查 totalSurplus 的值。如果它小于 0,说明整体汽油量不够绕环路行驶,返回 -1。
若 totalSurplus 大于等于 0,说明存在一个起始点可以绕环路行驶一周,返回记录的 start 编号。


http://www.kler.cn/a/524375.html

相关文章:

  • SpringBoot中@Valid与@Validated使用场景详解
  • 使用CSS实现一个加载的进度条
  • 低代码产品表单渲染架构
  • Ubuntu二进制部署K8S 1.29.2
  • Winform如何取消叉号,减号和放大(两种)
  • 【xcode 16.2】升级xcode后mac端flutter版的sentry报错
  • yolov11配置环境,实现OBB带方向目标检测
  • Deepseek爆火背后的多Token技术预测
  • PySide6(PyQT),QSqlQueryModel与QSqlQuery的关系
  • 使用scikit-learn实现线性回归对自定义数据集进行拟合
  • 计算机网络的基础设备
  • Selenium自动化测试框架 入门与使用
  • Appium介绍
  • COCO8 数据集上训练 YOLO11n:从入门到跑路(100 轮训练实战)
  • UE5.3 C++ CDO的初步理解
  • 论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(五)
  • SQL教程-基础语法
  • 算法基础学习——快排与归并(附带java模版)
  • 模糊综合评价
  • 咸鱼商品爬取|监控|sign逆向分析实现
  • 深度学习指标可视化案例
  • 每日 Java 面试题分享【第 16 天】
  • 【初/高中生讲机器学习】0. 本专栏 “食用” 指南——写在一周年之际⭐
  • sem_init的概念和使用案例-简洁版
  • 信息学奥赛一本通 1342:【例4-1】最短路径问题
  • 本地项目上传到码云