LeetCode经典例题|134. 加油站|运用坐标系数学思维一步解决

news2025/3/13 10:29:11

134. 加油站

在这里插入图片描述
这道题刚看很容易就想到了暴力或者回溯+剪枝。
这是一个有增有减的过程,就好像坐标系上的一个个点,连在一起形成一条上下起伏的折线。

1. 做坐标轴

比如 gas = [1,2,3,4,5], cost = [3,4,5,1,2]
从0号汽车站开始出发,一直到回到起点,存油量折现。
图1
当它从0号加油站行驶到3号加油站的时候,存油量还剩-6,这个时候是存油量最低的时候。
我们可以再试着从1号加油站、2号加油站出发试试
在这里插入图片描述
从1号加油站出发,也就意味着此时邮箱为空,也就是X坐标轴其实移动1号加油站,然后把之前的0-1号线段,拼凑到最后面。
所以折线自身其实并没有改变,起伏的趋势依然一样,最低点无论坐标轴以什么为0点,都还是最低点。
在这里插入图片描述
这一段必须理解,不然理解不了什么情况下说明存在解。

同时,从2号加油站出发,也是同理
11111

注意一下坐标含义

(3,-2): 从2号加油站出发,到达3号加油站的时候,我的油量只剩下-2了。

2. 从何时开始最优

很明显,从油箱油量最低的那一站A开始,去出发,肯定是最优解。
因为从A往后,油箱里的油量肯定都是要高于那一站的。
换句话说,无论从哪一个加油站开始,到达A时,邮箱油量肯定是最低。
只有从这一站出发,才能保证后续的补给足够。
从坐标轴来看,以最低点为原点,各站点存油量为正数才有可能最多。

3. 什么时候保证是有解的

如果只考虑某个点存油量是不是负数,明显有问题,因为它后续的加油站可以再存。
但是如果我们是以最低点A为原点,最终肯定还是到达A站点时,它的存油量是最少的。
上面已经分析过,曲线的起伏趋势是不会变的,最低点永远都是最低点。
那我们只要保证:
以最低点A为起点,最终再到达A站点时,它的存油量>=0,说明肯定够。
由于解唯一,而A是最优解,说明A就是唯一解。

4. 代码

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        // 做存油坐标系,找到存油量最少的点minIndex,以它为起点。
        int space=0;
        int minSpace=Integer.MAX_VALUE;
        int minIndex=0;
        for(int i=0;i<gas.length;i++){
            // 存油量
            space += gas[i]-cost[i];
            if(minSpace > space){
                minSpace = space;
                minIndex = i;
            }
        }
        // 如果最后存油量<0,说明肯定是不够的
        return space>=0 ? (minIndex+1)%gas.length : -1;
    }
}

为什么最后是返回minIndex+1呢

比如遍历从0开始,gas[i]-cost[i]=-2,那就满足,于是minIndex=0,它已经减去了当前站到下一站的耗油量,实际意义是,从0站出发后,到达一站时存油量最少,为-2。
假设求出2站为最低点,就是从0站一直从2站出发后,到达3站时,存油量最少。
那我们当然是要从3站出发。

总结:思路很值得借鉴,以坐标轴的形式来思考此类问题。但是坐标点含义,以及代码中定义的细节等需要注意。

在这里插入图片描述

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

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

相关文章

计算机网络(第三版) 胡亮 课后习题第四章答案

计算机网络&#xff08;第三版&#xff09; 胡亮 课后习题第四章答案 1、数据链路层的任务和功能是什么&#xff1f; 数据链路层的任务是提供两个相邻的网络节点或主机及其相连的网络节点之间的可靠通信。 数据链路层的主要服务功能是线路规程、差错控制和流量控制。 2、什么是…

第四阶段08-基于element-ui的vue2.0脚手架(续)

42. VUE脚手架项目嵌套路由 在配置路由&#xff08;配置/src/router/index.js&#xff09;时&#xff0c;如果配置的路由对象是routes常量的直接数组元素&#xff0c;则此路由配置的视图会显示在App.vue的<router-view/>中。 在设计视图时&#xff0c;可能会出现<ro…

深度学习基础实例与总结

一、神经网络 1 深度学习 1 什么是深度学习&#xff1f; 简单来说&#xff0c;深度学习就是一种包括多个隐含层 (越多即为越深)的多层感知机。它通过组合低层特征&#xff0c;形成更为抽象的高层表示&#xff0c;用以描述被识别对象的高级属性类别或特征。 能自生成数据的中…

Spring常见面试题汇总(超详细回答)

1.什么是Spring框架&#xff1f;Spring框架是一个开源的Java应用程序开发框架&#xff0c;它提供了很多工具和功能&#xff0c;可以帮助开发者更快地构建企业级应用程序。通过使用Spring框架&#xff0c;开发者可以更加轻松地开发Java应用程序&#xff0c;并且可以更加灵活地组…

C++学习笔记

C学习笔记 学习视频资料 随手记 vector是一个能够存放任意类型的动态数组 unordered_set 不能放重复元素的容器 emplace放入 std::cin.get(); //使控制器不会立马关闭&#xff0c;保持窗口打开 总是通过 const引用传递对象 默认 动态链接 static 静态链接&#xff08;只在当…

WebRTC Qos策略

1.WebRTC 用于提升 QoS 的方法&#xff1a;NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR&#xff08;动态帧率调整策略&#xff09;https://blog.csdn.net/CrystalShaw/article/details/80432267丢包重传NACK&#xff1a;一种通知技术&#xff0c;…

【办公类-19-02】Python批量制作word文本框的名字小标签,用A4word打印(植物角、家长会、值日生)

背景需求&#xff1a; 2月28日去小班带班&#xff0c;看到班主任制作了一些小手印花束作为家长会的家长座位提示&#xff0c;上面贴着“”圆形白色的幼儿名字贴”。 我立刻想起了制作的过程——在word中插入文本框&#xff0c;然后复制无数个文本框&#xff0c;摆好位置&#…

Win11的两个实用技巧系列之设置系统还原点的方法、安全启动状态开启方法

Win11如何设置系统还原点?Win11设置系统还原点的方法很多用户下载安装win11后应该如何创建还原点呢&#xff1f;现在我通过这篇文章给大家介绍一下Win11如何设置系统还原点&#xff1f;在Windows系统中有一个系统还原功能可以帮助我们在电脑出现问题的时候还原到设置的时间上&…

spring循环依赖debug源码【Java面试第三季】

spring循环依赖debug源码【Java面试第三季】前言spring循环依赖debug源码35_spring循环依赖debug源码01全部Debug断点36_spring循环依赖debug源码0237_spring循环依赖debug源码0338_spring循环依赖debug源码04最后前言 本文是4.Spring【Java面试第三季】的小节 spring循环依赖…

守护进程与TCP通讯

目录 一.守护进程 1.1进程组与会画 1.2守护进程 二.创建守护进程 setsid函数&#xff1a; 三. TCP通讯流程 3.1三次握手&#xff1a; 3.2 数据传输的过程 3.3四次挥手 一.守护进程 1.1进程组与会画 进程组&#xff1a;进程组由一个进程或者多个进程组成&#xff0c;每…

谷歌优化排名怎么做出来的?谷歌排名多久做上去?

本文主要分享谷歌排名的算法机制&#xff0c;让你很容易地用更短的时间把Google的自然排名做到首页。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 谷歌优化排名怎么做出来的&#xff1f; 答案是&#xff1a;持续更新原创优质内容…

让WPF中的DataGrid像Excel一样可以筛选

在默认情况下&#xff0c;WPF提供的DataGrid仅拥有数据展示等简单功能&#xff0c;如果要实现像Excel一样复杂的筛选过滤功能&#xff0c;则相对比较麻烦。本文以一个简单的小例子&#xff0c;简述如何通过WPF实话DataGrid的筛选功能&#xff0c;仅供学习分享使用&#xff0c;如…

唯品会财报:一面骄阳,一面寒霜

配图来自Canva可画 在互联网技术飞速发展、物流基础设施日益完善&#xff0c;以及消费者购物习惯不断改变等多重因素的共同影响下&#xff0c;电商行业实现了蓬勃发展。得益于此&#xff0c;电商行业也跑出了许多知名电商品牌&#xff0c;其中既有淘宝、京东、拼多多等综合型电…

SSRF漏洞原理、危害以及防御与修复

一、SSRF漏洞原理漏洞概述SSRF&#xff08;Server-side Request Forge&#xff0c;服务端请求伪造&#xff09;是一种由攻击者构造形成由服务端发起请求的安全漏洞。一般情况下&#xff0c;SSRF攻击的目标是从外网无法访问的内部系统。正是因为它是由服务端发起的&#xff0c;所…

Java开发 - Elasticsearch初体验

目录 前言 什么是es&#xff1f; 为什么要使用es&#xff1f; es查询的原理&#xff1f; es需要准备什么&#xff1f; es基本用法 创建工程 添加依赖 创建操作es的文件 使用ik分词插件 Spring Data 项目中引入Spring Data 添加依赖 添加配置 创建操作es的业务逻…

深度学习常用的激活函数总结

各种激活函数总结 目录一、sigmoid二、tanh![在这里插入图片描述](https://img-blog.csdnimg.cn/a0d92552edf8464db793fdd2f2b75cb5.png)三、ReLU系列1.原始ReLU2.ReLU改进&#xff1a;Leaky ReLU四、swish五、GeLU一、sigmoid 优点&#xff1a; 1.可以将任意范围的输出映射到 …

高通平台开发系列讲解(Sensor篇)AlsPs的工作原理及介绍

文章目录 一、什么是ALS?二、什么是距感(PS)?三、AlsPs的工作原理四、AlsPs的特性五、距感的校准参数说明六、光感的校准参数说明沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 AlsPs 的工作原理及介绍。 一、什么是ALS? 光感的英文叫做Ambient Li…

算法小抄2-刷题中Python的常用语法

标准数据类型 不可变数据类型: Number String Tuple 可变数据类型:List Dictionary Set 关于为什么会分成可变和不可变最后会讲到哦 Number Number支持int,float,bool,complex四种,其中int范围小且必须为整数,float范围较大,可以是是小数,bool值表示是否,complex为复数,赋值…

20- widedeep及函数式构建模型 (TensorFlow系列) (深度学习)

知识要点 wide&deep: 模型构建中, 卷积后数据和原始数据结合进行输出.fetch_california_housing&#xff1a;加利福尼亚的房价数据&#xff0c;总计20640个样本&#xff0c;每个样本8个属性表示&#xff0c;以及房价作为target&#xff0c;所有属性值均为number&#xff0…

网上医疗预约挂号系统

技术&#xff1a;Java、JSP等摘要&#xff1a;网上医疗预约挂号系统是主要是对居民的保健、护理、疾病预防等健康信息实行有效的预约挂号管理。医疗机构为居民建立完整的健康档案&#xff0c;安排体检以及实施免疫等预防措施。而基于Web的远程保健平台以网上医疗预约挂号系统为…