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

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;}
}

相关文章:

  • GO语言语法---For循环、break、continue
  • AI图像处理之ComfyUI节点(二)
  • 前缀和——中心数组下标
  • Compose笔记(二十五)--Brush
  • NSString的三种实现方式
  • OpenHarmony外设驱动使用 (四),Face_auth
  • 三极管集电极输出电路分析
  • IT审计之外包
  • 【图像生成大模型】CogVideoX-5b:开启文本到视频生成的新纪元
  • 第三十七节:视频处理-视频读取与处理
  • 常见的 HTTP 接口(请求方法)
  • Uniapp 与 Uniapp X 对比:新手上手指南及迁移到 Uniapp X 的注意事项
  • Word文档图片和图表自动添加序号
  • 19. 结合Selenium和YAML对页面实例化PO对象改造
  • Elasticsearch基础篇-java程序通过RestClient操作es
  • BUUCTF——ReadlezPHP
  • Android 手写签名功能详解:从原理到实践
  • 第五部分:阶段项目 4:构建 RESTful API 服务器
  • 关于机器学习的实际案例
  • 【Java ee初阶】jvm(2)
  • 家庭医生可提前5天预约三甲医院号源,上海常住人口签约率达45%,
  • 国际博物馆日|航海博物馆:穿梭于海洋神话与造船工艺间
  • 广东一驴友在英德野景点溺亡,家属被爆向21名同伴索赔86万
  • 广州医药集团有限公司原党委书记、董事长李楚源被“双开”
  • 河南一女子被医院强制带走治疗,官方通报:当值医生停职
  • 民间打拐志愿者上官正义遭人身安全威胁,杭州公安:已立案