力扣网编程134题:加油站(双指针)

一. 简介

前面两篇文章使用暴力解法,或者贪心算法解决了力扣网的加油站问题,文章如下:

力扣网编程150题:加油站(暴力解法)-CSDN博客

力扣网编程150题:加油站(贪心解法)-CSDN博客

本文使用双指针解法来解决 加油站题目。

二. 力扣网编程150题:加油站(中等)

解题思路三:(双指针)

使用双指针法求解的核心思路是:通过两个指针模拟"起点" 和 "终点" 的扩展, 判断从起点能否到达终点并绕行一圈。

1. 总体判断:

如果总油量 total_gas < total_cost,则返回 -1(说明无论哪个起点出发都无法绕一圈);

2. 双指针策略:

current_tank: 表示当前累计的油量 (currtent += gas[i] + cost[i]);

使用慢指针 start 模拟起点,使用快指针 fast模拟行驶;

如果 fast行驶到某个站时 current_tank < 0,说明从 start无法到达 fast站点,则将 start直接跳转到 fast+1(current_tank<0,说明在 start和 fast之间的任何一点都不能作为起点);

3. 结果:循环结束,start 即为可绕一圈的起点。

答案在于总油量条件的保证

  • total_tank >= 0 时,只要找到一个起点 start,使得从 start 到最后一个加油站的路径可行,那么从最后一个加油站绕回 start 的路径必然也可行(因为总油量足够)
  • 因此,代码只需验证从 start 出发能否到达最后一个加油站即可,无需额外绕环。

C语言实现如下:

//双指针法(快慢指针)
//慢指针 start:模拟起点
//快指针 fast:模拟行驶路线
int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize) {int i;int total_tank = 0;int start = 0; //尝试的起点int fast = 0;  //模拟的终点int current_tank = 0; //当前累积的油量//大体判断//如果总油量 < 总消耗,则说明无论哪个起点都无法绕一圈for(i = 0; i < gasSize; i++) {total_tank += gas[i]-cost[i];}if(total_tank < 0) {return -1;}//否则,必然存在一起出发可以绕一圈while(fast < gasSize) {current_tank += gas[fast]-cost[fast];//说明 从start无法到达 fast站点//那么在 start和 fast站之间的任何一点都不能作为起点if(current_tank < 0) {start = (fast+1) %gasSize;current_tank = 0;}fast++;}  return start;    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913975.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XPath 语法【Web 自动化-定位方法】

&#x1f9ed; XPath 语法简介&#xff08;Web 自动化核心定位手段&#xff09;一、XPath 是什么&#xff1f;XPath&#xff08;XML Path Language&#xff09;是用于在 XML/HTML 文档中定位节点的语言&#xff0c;由 W3C 标准定义。浏览器支持的是 XPath 1.0。应用场景广泛&am…

记一次 Linux 安装 docker-compose

一.下载 1.手动下载 下载地址&#xff1a;https://github.com/docker/compose/releases 下载后&#xff0c;放在/usr/local/bin/目录下&#xff0c;命名为&#xff1a;docker-compose 2.命令下载 sudo curl -L "https://github.com/docker/compose/releases/download/…

Go语言WebSocket编程:从零打造实时通信利器

1. WebSocket的魅力&#xff1a;为什么它这么火&#xff1f;WebSocket&#xff0c;简单来说&#xff0c;就是一种在单条TCP连接上实现全双工通信的神器。相比HTTP的请求-响应模式&#xff0c;它像是一条随时畅通的电话线&#xff0c;客户端和服务器可以随时“喊话”&#xff0c…

速学 RocketMQ

目录 本地启动&测试&可视化 核心概念 集群 主从 集群 Dledger 集群 总结 客户端消息确认机制 广播模式 消息过滤机制 顺序消息机制 延迟消息与批量消息 事务消息机制 ACL权限控制体系 RocketMQ客户端注意事项 消息的 ID、Key、Tag 最佳实践 消费者端…

【个人思考】不点菜的美学:Omakase 的信任、四季与食艺

本文原创作者:姚瑞南 AI-agent 大模型运营专家/音乐人/野生穿搭model,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 🍣 什么是 Omakase?…

vivo Pulsar 万亿级消息处理实践(3)-KoP指标异常修复

作者&#xff1a;vivo 互联网大数据团队- Chen Jianbo 本文是《vivo Pulsar万亿级消息处理实践》系列文章第3篇。 Pulsar是Apache基金会的开源分布式流处理平台和消息中间件&#xff0c;它实现了Kafka的协议&#xff0c;可以让使用Kafka API的应用直接迁移至Pulsar&#xff0c;…

Marin说PCB之Allegro高亮BOM器件技巧详解

一&#xff0c;首先在原理图输出BOM的时候&#xff0c;只需要勾选器件的位号这个选项即可&#xff0c;具体操作如下所示&#xff1a;二&#xff0c;输出BOM完成后&#xff0c;打开表格选择我们器件的位号那列即可&#xff0c;然后复制到我们的TEXT文本中。三&#xff0c;接着就…

数据结构与算法——从递归入手一维动态规划【2】

前言&#xff1a; 记录一下对左程云系列算法课程--算法讲解066【必备】的剩余习题的学习。本文主要简单记录个人学习心得和提供C版本代码。如需要题目的细致讲解&#xff0c;请前往原视频。 涉及内容&#xff1a; 动态规划、三指针、 参考视频&#xff1a; 左程云--算法讲…

【理念●体系】Windows AI 开发环境搭建实录:六层架构的逐步实现与路径治理指南

【理念●体系】从零打造 Windows WSL Docker Anaconda PyCharm 的 AI 全链路开发体系-CSDN博客 Windows AI 开发环境搭建实录&#xff1a;六层架构的逐步实现与路径治理指南 ——理念落地篇&#xff0c;从路径规划到系统治理&#xff0c;打造结构化可复现的 AI 开发环境 AI…

5G标准学习笔记15 --CSI-RS测量

5G标准学习笔记15 --CSI-RS测量 前言 前面讲了&#xff0c;在5GNR中&#xff0c;CSI-RS 是支持信道状态评估、波束管理和无线资源管理&#xff08;RRM&#xff09;的关键参考信号。下面孬孬基于3GPP TS 38.331中的内容&#xff0c;详细定义了基于 CSI-RS 的测量程序&#xff0c…

第P28:阿尔茨海默病诊断(优化特征选择版)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、进阶说明 针对于特征对模型结果的影响我们做了特征分析 特征选择 1. SelectFromModel 工作原理&#xff1a;基于模型的特征选择方法&#xff0c;使用…

AI的欧几里得要素时刻:从语言模型到可计算思维

引言 人工智能正在经历一个关键的转折点。就像欧几里得的《几何原本》为数学奠定了公理化基础一样&#xff0c;AI也正在寻找自己的"要素时刻"——一个能够将当前的语言模型能力转化为真正可计算、可验证思考的转变。 最近发表的论文《AI’s Euclid’s Elements Momen…

番外-linux系统运行.net framework 4.0的项目

基础环境&#xff1a;linux系统&#xff0c;.net framework 4.0&#xff0c;npgsql 2.2.5.0 &#xff08;版本不同&#xff0c;构建可能失败&#xff09; 方法背景&#xff1a;linux不支持运行.net framework 4.0&#xff0c;高版本mono不支持npgsql 2.x 主要使用&#xff1a…

国内AI训练都有哪些企业?:技术深耕与场景实践

国内AI训练都有哪些企业&#xff1f;当人工智能从实验室走向产业一线&#xff0c;AI 训练就像为智能系统 “施肥浇水” 的关键环节&#xff0c;让技术根系在各行业土壤里扎得更深。国内一批 AI 训练企业正各展所长&#xff0c;有的专攻技术优化&#xff0c;有的深耕场景应用。它…

微算法科技基于格密码的量子加密技术,融入LSQb算法的信息隐藏与传输过程中,实现抗量子攻击策略强化

随着量子计算技术的发展&#xff0c;传统加密算法面临被量子计算机破解的风险&#xff0c;LSQb 算法也需考虑应对未来可能的量子攻击。微算法科技基于格密码的量子加密技术&#xff0c;融入LSQb算法的信息隐藏与传输过程中&#xff0c;实现抗量子攻击策略强化。格密码在面对量子…

xAI发布Grok4+代码神器Grok4 Code,教你如何在国内升级订阅SuperGrok并使用到Grok4教程

就在今天&#xff0c;马斯克旗下xAI发布了其最新的旗舰AI模型Grok4&#xff0c;并同步推出专为开发者打造的编程利器 Grok 4 Code&#xff0c;还推出了一项全新的AI订阅计划——每月300美元的SuperGrokHeavy。 那最新发布的Grok4以及有哪些特性呢&#xff1f;以及如何才能使用…

Rust 变量遮蔽(Variable Shadowing)

在 Rust 中&#xff0c;变量遮蔽&#xff08;Variable Shadowing&#xff09; 是一种在同一作用域内重新声明同名变量的特性。它允许你创建一个新变量覆盖之前的同名变量&#xff0c;新变量与旧变量类型可以不同&#xff0c;且旧变量会被完全隐藏。核心特点允许同名变量重复声明…

【VScode | 快捷键】全局搜索快捷键(ctrl+shift+f)失效原因及解决方法

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f60e;金句分享&#x1f60e;&a…

Windows 与 Linux 内核安全及 Metasploit/LinEnum 在渗透测试中的综合应用

目录 &#x1f6e0;️ 1. 内核安全如何助力渗透测试与黑客行业 1.1 内核安全的战略价值 1.2 结合 Metasploit 与 LinEnum 的作用 &#x1f50d; 2. Metasploit 信息收集模块及其在内核安全中的应用 2.1 Windows 信息收集模块 2.2 Linux 信息收集模块 2.3 使用步骤 Wind…

京东携手HarmonyOS SDK首发家电AR高精摆放功能

在电商行业的演进中&#xff0c;商品的呈现方式不断升级&#xff1a;从文字、图片到视频&#xff0c;再到如今逐渐兴起的3D与AR技术。作为XR应用探索的先行者&#xff0c;京东正站在这场体验革新的最前沿&#xff0c;不断突破商品展示的边界&#xff0c;致力于通过创新技术让消…