力扣134-加油站(java题解)

news2024/11/15 17:41:18

题目链接:134. 加油站 - 力扣(LeetCode)

前情提要:

因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。

贪心方法:局部最优推出全局最优。

如果一个题你觉得可以用局部最优推出全局最优,并且没有反例来反驳的话就可以用贪心来试试。

题目思路:

该题入手,你可能知道,当总容量减去总消耗量大于等于0,那么该路程一定是可以环路行驶一周的,但是怎么确认出发的加油站编号呢?

我们用贪心的思路来想想。

将每个加油站的净增量(gas[i] - cost[i])算出,其实就是从该加油站出发到下一站所得到的油。

我们将每一个加油站的净增量累加,如果该和小与0,说明到该加油站的油量已经不足了,那么只有从下一站才可能为出发点。

举个例子。

在这里插入图片描述

从0到4我们开始累加,我们加到2时发现,我们剩余的油量已经不支持我们到达2了,那0和1就不可能是出发点,我们的出发点只会3后面。

因为不管是从0还是1开始到2的油量都为负数了,所以肯定是不可能从0和1出发的。

那i+1后面就不会出现更大的负数?

如果出现更大的负数,就是更新i,那么起始位置又变成新的i+1了。

那么局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。全局最优:找到可以跑一圈的起始位置

最终代码:

class Solution {
    //如果该路线的总消耗量减去总增长量为0 那么一定是可以走完全程的 现在我们就是要确认出发点
    //本题首先我们要把到每个加油站油的净增量 res[i] = gas[i] - cost[i]给算出来 并累加起来 
    //如果我们从0到i连续累加小与0 说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。
    //也就是我们这个连续和的区间不可能行驶一圈了 因为我们的剩油量小于0 不能到达下一个加油站
    //此时我们只有从下一个加油站开始出发才可能会走完一圈
    //所以我们的局部最优就是:当前累加的和只要小与0 就会从下一个加油站开始重新出发 
    //全局最优 找到可以走完一圈的路线

    public int canCompleteCircuit(int[] gas, int[] cost) {
        int curSum = 0;
        //totalSum就是所有加油站加起来的净增量,如果小与0 那么不可能会走完一圈
        int totalSum = 0;
        int nextIndex = 0;
        for(int i = 0;i < gas.length;i++){
            curSum += gas[i] - cost[i];
            totalSum += gas[i] - cost[i];
            //当curSum<0时 那前面的 0 到 i都不可能是起始位置 只有后面的才有可能为起始位置
            //也就是我们在实时更新我们出发的位置 直到可以走完一圈
            //其实我们的起始位置肯定是前面的连续和为负数 后面的都大于0
            if(curSum < 0){
                //在这里我们更新出发点,此时前面加油站所累加的油就要清空
                nextIndex = i + 1;
                curSum = 0;
            }
        }
        if(totalSum < 0)return -1;
        return nextIndex;
    }
}

这一篇博客就到这了,如果你有什么疑问和想法可以打在评论区,或者私信我。

我很乐意为你解答。那么我们下篇再见!

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

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

相关文章

IO进程day06(进程间通信、信号、共享内存)

目录 【1】进程间通信 IPC 1》 进程间通信方式 2》 无名管道 1> 特点 2> 函数接口 3> 注意事项 练习&#xff1a;父子进程实现通信&#xff0c;父进程循环从终端输入数据&#xff0c;子进程循环打印数据&#xff0c;当输入quit结束。 3》有名管道 1> 特点 …

24数学建模国赛准备!!!!(10——马氏链模型)

详细获取资料方式在文章末尾&#xff01;&#xff01;&#xff01;&#xff01; 点击链接加入群聊获取资料以及国赛助力https://qm.qq.com/q/NGl6WD0Bky &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

多场景建模: STAR(Star Topology Adaptive Recommender)

之前&#xff0c;分享了一篇关于多任务学习的文章&#xff1a;多任务学习MTL模型&#xff1a;MMoE、PLE&#xff0c;同样的还有关于多任务学习中的多目标loss优化策略。 这篇文章则开始一个与多任务学习有着紧密联系的系列&#xff1a;多场景建模学习。 前言 首先&#xff0…

[Raspberry Pi]如何利用docker執行motioneye,並利用Line Notify取得即時通知和照片?

[Motioneye]How to setup motion detection and send message/image for Line Notify 無意間&#xff0c;翻了一本關於樹莓派的書籍&#xff0c;除了樹莓派的簡介和應用外&#xff0c;也包含初階和高階的Linux運作邏輯&#xff0c;書籍結構相當完整&#xff0c;也因此需要花時間…

DAC: High-Fidelity Audio Compression with Improved RVQGAN

Rithesh KumarDescript, Inc.2023NIPS code 文章目录 abstratmethod abstrat 44.1k音频编码为8k bps&#xff0c;接近90x压缩比&#xff1b;可以处理speech, musiccodebook collapse: 部分码本没有利用到。----quantizer dropout &#xff1a;允许单个模型支持可变比特率&…

HarmonyOS NEXT实战:“相机分段式拍照”性能提升实践

概述 相机拍照性能依赖算法处理的速度&#xff0c;而处理效果依赖算法的复杂度&#xff0c;算法复杂度越高的情况下会导致处理时间就越长。目前系统相机开发有两种相机拍照方案&#xff0c;分别是相机分段式拍照和相机单段式拍照&#xff1a; 分段式拍照是系统相机开发的重要…

几款最新好用的图纸加密软件

在现代数字化办公环境中&#xff0c;图纸的保护变得尤为重要。无论是建筑设计图纸、工程图纸&#xff0c;还是机械制造图纸&#xff0c;如何有效地加密并保护这些机密文件&#xff0c;避免信息泄露&#xff0c;是每个企业都需要重视的问题。今天&#xff0c;我们就来推荐几款最…

从开题到答辩:ChatGPT超全提示词分享!(下)【建议收藏】

数据收集 1. "请帮我找出关于如何收集【研究领域】社交媒体数据进行消费者行为研究的五篇指导性文章&#xff0c;并概述它们的主要方法论摘要。" 2. "我需要对【特定领域】市场的消费者偏好进行调查。能否提供一份包含调查问卷设计原则和示例的草稿&#xff1f;…

react vant 在使用dialog.confirm取消报错 Uncaught (in promise) undefined

项目场景&#xff1a; 在使用react做移动端开发时&#xff0c;需要使用Dialog.confirm确认框来做弹框选项&#xff0c;这是在操作中非常常用的一种场景。 问题描述 在列表中&#xff0c;使用弹框时&#xff0c;点击取消时&#xff0c;语法报错&#xff1b;导致后面再触发弹框…

养老小程序源码家政服务小程序开发方案

预约上门养老小程序&#xff0c;是php开发预约&#xff0c;前端是uniapp&#xff0c;有开发好的小程序案例&#xff0c;可源码&#xff0c;也可以二开&#xff0c;也可以定制开发。 一 用户端&#xff1a;服务分类、服务内容详情介绍、在线下单支付&#xff0c;管理我的订单。…

认知杂谈42

今天分享 有人说的一段争议性的话 I I 《摆脱自负自卑&#xff0c;找准自我定位》 I 在咱的生活里啊&#xff0c;有时候咱会在自负和自卑这两个地方来回晃悠&#xff0c;根本就找不着真正属于自己的那个位置。你想想看&#xff0c;自负的时候呢&#xff0c;就好像给自己戴了…

Unity(2022.3.41LTS) - 地形

目录 一、地形的创建 二.页面详解 1.创建相邻的 Terrain 瓦片。 2.雕刻和绘制地形。 3.添加树。 4.添加细节&#xff0c;如草地、花朵和岩石。 5.更改所选 Terrain 的常规设置 三、地形编辑工具 四、地形的属性设置 五、地形的优化 六、地形的应用场景 一、地形的创…

校园牛奶订购配送小程序开发制作方案

校园牛奶订购配送小程序系统的开发方案&#xff0c;包括对用户需求的分析、目标用户的界定、使用场景的设定以及开发功能模块的规划。校园牛奶订购配送小程序系统主要是为校园内学生和教职工提供牛奶订购与配送服务。 目标用户 主要面向在校学生、教职工以及其他有牛奶订购需求…

Mac GIF录制神器LICEcap

GIF录制软件的优点先看下 mac gif制作win gif录制完全免费界面简洁软件大小不到1M 今天就来介绍一款录屏并能生成 GIF 的软件&#xff1a;LICEcap。 背景 希望小巧免费的GIF录制的话LICEcap非常适合&#xff0c;网上很多能轻松录制屏幕的工具&#xff0c;基本都是录制之后带…

操作系统:实验四进程调度实验

一、实验目的 1、了解操作系统CPU管理的主要内容。 2、加深理解操作系统管理控制进程的数据结构--PCB。 3、掌握几种常见的CPU调度算法&#xff08;FCFS、SJF、HRRF、RR&#xff09;的基本思想和实现过程。 4、用C语言模拟实现CPU调度算法。 5、掌握CPU调度算法性能评价指…

基于python文案转语音并输出-自媒体等职业副业均可使用,不受他人限制

开发背景: 目前自媒体比较火爆,有很多书单、视频等推广方式可以作为副业盈利,之前每次搞的时候都需要不停的网上找一些在线文字转语音的平台将文案复制上去然后生成下载,好多还是付费的,挺无奈的,然后就想着自己能不能搞,然后的然后就有了下面的东西, 如果大家有此类需要…

文心智能体-梦想目标实现助手-实现你的老板梦

前言&#xff1a; 其实我从小就很羡慕小说里面的男主&#xff0c;从家境贫寒到后面成为天之骄子&#xff0c;在一路上都有很多好的机遇和贵人。用今天的话来说&#xff0c;男主好像都有一个“系统”&#xff0c;毫不意外&#xff0c;我也有这样的武侠梦&#xff0c;金庸的小说更…

波导阵列天线学习笔记6 用于K和Ka频段卫星通信的超宽带双圆极化波导阵列天线

摘要: 在本文中&#xff0c;设计了一种用于K和Ka双频段的宽带双圆极化波导天线阵列。一种多级方波导结构被利用&#xff08;exploited&#xff09;在辐射层内来实现双极化响应的激励。一种脊波导极化器被集成在内来实现左旋圆极化和右旋圆极化。为了馈网的更好设计&#xff0c;…

qtlinux

filezilla传 白色 权限不够 chmod x ./运行 source路径 qmake make 55可执行文件 nfs拷贝到开发版 ./运行 make j 核数 &#xff08;加速编译过程&#xff09;

【精选】推荐4款写作效率翻倍的AI论文写作助手

在当前的学术研究和写作领域&#xff0c;AI论文写作助手已经成为提高写作效率和质量的重要工具。这些工具利用先进的自然语言处理和机器学习技术&#xff0c;帮助研究人员和学生快速生成论文草稿、优化内容、进行查重和排版等操作。以下是四款高效且广受好评的AI论文写作助手&a…