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

LeetCode 134. 加油站 java题解

https://leetcode.cn/problems/gas-station/description/

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int len=gas.length;
        int a=0,b=0;
        for(int i=0;i<len;i++){
            a+=gas[i];
            b+=cost[i];
        }
        if(a<b) return -1;//不够
        //够。要找起点
        int cur=0;
        int start=0;
        for(int i=0;i<len;i++){
            cur+=(gas[i]-cost[i]);
            if(cur<0){//当前位置无法到下个位置,无法前进
                cur=0;
                start=i+1;
            }
        }
        return start;
    }
}

总的加油量大于等于总耗油量。为什么 total_tank 大于等于0 就说明总加油量是够的?

  • 从实际意义理解:每一个 gas[i] - cost[i] 表示在第 i 个加油站加油后,到下一个加油站时油量的净变化。如果把所有这些净变化累加起来得到 total_tank >= 0,就说明在整个环形路线上,车辆在各个加油站加油后,整体上是有足够的油量来支持完成一圈行驶的。即使在某些局部路段,车辆可能出现油量不足的情况(即 current_tank < 0),但从全局来看,通过合理选择起点和在其他加油站的加油,最终是能够绕一圈的。

举个简单的例子,如果有三个加油站,gas = [3, 5, 1]cost = [2, 4, 2],计算可得 total_tank = (3 - 2) + (5 - 4) + (1 - 2) = 1 + 1 - 1 = 1 >= 0。这表明虽然从第三个加油站出发单独看是无法开到下一个加油站的(因为 1 - 2 = -1 < 0),但综合三个加油站的情况,总加油量是足够完成一圈行程的,实际上从第一个加油站出发就可以绕一圈。


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

相关文章:

  • java生成一个可以下载的word文件
  • 2025信创即时通讯排行:安全合规与生态适配双轮驱动
  • java string 类型转list实体类且忽略实体类中没有的字段
  • java查询es超过10000条数据
  • VS代码生成工具ReSharper v2024.3——支持C# 13
  • Redis-分布式锁实现秒杀
  • 通过 TTL 识别操作系统的原理详解
  • 【leetcode hot 100 39】组合总和
  • leetcode每日一题:最大或值
  • 发现一个好用的Vue.js内置组件
  • Bitcoin Thunderbolt 内测通道开启,加速比特币交易新时代
  • 大数据从入门到入魔系列————探索大数据前世今生之迷
  • 快速入手-基于Django的mysql操作(四)
  • stressapptest交叉编译(ARM64)
  • 批量删除 PPT 文档中的宏
  • D-Wave专用量子计算机登顶Science 率先展示在真实场景中的量子优势(内附下载)
  • 阿里云国际站代理商:如何延长服务器硬盘寿命?
  • 七天免登录 为什么不能用seesion,客户端的http请求自动携带cookei的机制(比较重要)涉及HTTP规范
  • 【数据结构】栈与队列:基础 + 竞赛高频算法实操(含代码实现)
  • 数组模拟邻接表 #图论