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

Leetcode134加油站

题目链接

134

题意图解:

在这里插入图片描述

  • 题目给了n个节点,这些节点呈现环状,每次到一个低点要消耗cost[i]的油量。
    从中我们可以得出一个结论:看一个点能不能到下一个点,就要用当前的油量减去消耗的量,那么gas[i] - cost[i],就表明这个点到了下一个点之后剩余的油量,如果是负数,说明它走不到下一个点,会在半路熄火。

  • 那么它的累加和的意义就是从累加起点到累加终点剩余的油量,如果为负数,那么说明我们当前选取的起点无法到达目前的终点,为正数好理解,还有余量,只要大于等于0,都是可以的。

  • 然后我们继续往下思考:

  1. 题目场景是个环,给的数据结构是数组,是线性的,怎么模拟实现一个环?多重循环会超时且麻烦,回想能循环的,能用数组模拟的结构,便是循环队列,在循环队列中,我们就是采用下标对数组长度取模来实现一个循环的数组的,这样就可以模拟环结构了。
  2. 我们发现当前起点选取不合理,该怎么调整呢?

在这里插入图片描述

我们来看左程云举得例子,如果起点l 到 终点r时为负数,那么说明在r - 1的时候余量还是大于等于0的,也就是说我们从l 到r - 1获取的油量刚好是大于等于0的,如果我们不从 l 开始呢?这意味着我们会少加一些余量,那我们想想,之前余量没少加的时候都到达不了l,现在余量少加了,还能到吗?显然不能,所以此时我们要让左边界来到r + 1的位置重新进行滑动窗口右边界的扩展。

代码

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int n = gas.length;for (int r = 0, l = 0, sum; l < n; l = r + 1, r = l) { sum = 0;while (sum + gas[r % n] - cost[r % n] >= 0) { if (r - l + 1 == n) { return l;}sum += gas[r % n] - cost[r % n];r ++;}}return -1;}
}
http://www.lryc.cn/news/2379945.html

相关文章:

  • 关于Android Studio for Platform的使用记录
  • Linux的内存泄漏问题及排查方法
  • uniapp 微信小程序 获取openId
  • 隧道结构安全在线监测系统解决方案
  • Docker 运维管理
  • 【Redis】快速列表结构
  • 阿里巴巴 1688 数据接口开发指南:构建自动化商品详情采集系统
  • [SpringBoot]Spring MVC(2.0)
  • Golang的网络安全策略实践
  • STM32外设AD-轮询法读取模板
  • C++编程this指针练习
  • iOS音视频解封装分析
  • 突破智能驾舱边界,Imagination如何构建高安全GPU+AI融合计算架构
  • DeepSeek 如何实现 128K 上下文窗口?
  • 云计算简介:从“水电”到“数字引擎”的技术革命
  • 计算圆周率 (python)
  • Python 实现图片浏览和选择工具
  • Python实现的在线词典学习工具
  • ES常识9:如何实现同义词映射(搜索)
  • BGP综合实验(2)
  • java实现poi-ooxml导出Excel的功能
  • 代码随想录算法训练营 Day51 图论Ⅱ岛屿问题Ⅰ
  • 【占融数科-注册/登录安全分析报告】
  • 【CF】Day62——Codeforces Round 948 (Div. 2) CD (思维 + LCM + 枚举因数 | 思维 + 哈希)
  • 基于requests_html的python爬虫
  • 循环神经网络:捕捉序列数据中的时间信息
  • 第35周Zookkeeper+Dubbo 面试题精讲
  • 聊聊更新中断和更新事件那些事儿
  • STM32:按键模块 传感器模块 以及 相关C语言知识(详细讲解)
  • C++23 std::mdspan:多维数组处理新利器