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

题目链接: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都不可能是起始位置 只有后面的才有可能为起始位置//也就是我们在实时更新我们出发的位置 直到可以走完一圈//其实我们的起始位置肯定是前面的连续和为负数 后面的都大于0if(curSum < 0){//在这里我们更新出发点,此时前面加油站所累加的油就要清空nextIndex = i + 1;curSum = 0;}}if(totalSum < 0)return -1;return nextIndex;}
}

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

源代码编译,Apache DolphinScheduler前后端分离部署解决方案

转载自神龙大侠 生产环境部署方案 在企业线上生产环境中&#xff0c;普遍的做法是至少实施两套环境。 测试环境线上环境 测试环境用于验证代码的正确性&#xff0c;当测试环境验证ok后才会部署线上环境。 鉴于CI/CD应用的普遍性&#xff0c;源代码一键部署是必要的。 本文…

【王树森】RNN模型与NLP应用(7/9):机器翻译与Seq2Seq模型(个人向笔记)

Machine Translation Data 做机器学习任务的第一步都是处理数据&#xff0c;我们首先需要准备机器翻译的数据。由于我们是学习用途&#xff0c;因此拿一个小规模数据集即可&#xff1a;http://www.manythings.org/anki/下面的数据集中&#xff1a;一个英语句子对应多个德语句子…

Sinc Function介绍

1、定义 Sinc函数全称&#xff1a;sine cardinal&#xff0c;也称作是sampling function&#xff08;采样函数&#xff09;。 2、分类 &#xff08;1&#xff09;归一化sinc函数&#xff1a; 这种定义在信号处理中被广泛采用&#xff0c;其中 x 是一个无量纲的变量&#xff0c;…

鸿蒙开发5.0【基于Swiper的页面布局】

场景一&#xff1a;Swiper页面支持自定义动画 方案&#xff1a; 给Swiper组件设置.nextMargin(50).prevMargin(50)属性。 给Swiper组件添加onChange事件&#xff0c;设置当前this.currentIndexindex&#xff0c;当currentIndex为首页或者尾页时&#xff0c;设置上一张以及下一…

生产环境中变态开启devtools(强制)

写到最前面 首先&#xff0c;你已经下载了google的插件【vue devtools】&#xff0c;不知道怎么下载&#xff0c;留言博主 如果你想看的项目中的vuetools插件打开是这样的 Vue.js is detected on this page. Devtools inspection is not available because it’s in product…

Unet改进14:添加SEAttention||减少冗余计算和同时存储访问

本文内容:在不同位置添加SEAttention注意力机制 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 卷积算子是卷积神经网络(cnn)的核心组成部分,它使网络能够通过融合每层局部接受域内的空间和通道信息来构建信息特征。之前的广泛研究已经调查了这种关系的…

大模型之二十九-语音识别Whisper推理加速

在上一篇博客《大模型之二十八-语音识别Whisper进阶》中我们留了一个尾巴&#xff0c;就是在流式场景以及如何提升推理速度。 流式场景 流式场景分两种&#xff0c;一种是伪流式一种是真流式&#xff0c;伪流式就是bilibili或者YouTub&#xff0c;终端用户在观看视频的时候&a…

人工智能再次进化 善用AI提升营运效率

人工智能无疑为我们的生活带来不少便利&#xff0c;也为商界和社会发展作出了重大贡献。事实上&#xff0c;它的起源最早可以追溯到70年前&#xff0c;只可惜过往的 AI 技术尚未如现时般成熟&#xff0c;可以做到的事也远比现在少&#xff1b;直至近期的 AI 技术取得了重大突破…

人工智能领域正经历模型规模变革,小型语言模型(SLM)崛起,挑战“规模至上”观念。

在人工智能领域&#xff0c;一场关于模型规模的深刻变革正在悄然发生。长久以来&#xff0c;科技巨头们热衷于庞大语言模型&#xff08;LLM&#xff09;的开发竞赛&#xff0c;但如今&#xff0c;小型语言模型&#xff08;SLM&#xff09;正以其独特的优势逐步崭露头角&#xf…

【qt】qss使用

1.按钮设置颜色 ui->pushButton->setStyleSheet("QPushButton { color : red;}");也可以通过rgb来设置 ff表示红色拉满&#xff0c;gb为0当然是红色 这只是针对pushbutton对象的控件设置的&#xff0c;如果我想设置所有的按钮空间都是一个颜色 这是通过设置界…

dubbo:dubbo服务负载均衡、集群容错、服务降级、服务直连配置详解(五)

文章目录 0. 引言1. dubbo负载均衡1.1 负载均衡算法1.2. dubbo负载均衡使用1.3 自定义负载均衡策略 2. dubbo服务容错2.1 8种服务容错策略2.2 自定义容错策略 3. dubbo服务降级&#xff08;mock&#xff09;4. dubbo服务直连5. 总结 0. 引言 之前我们讲解了dubbo的基本使用&am…

使用 AI进行绘画初体验

大家好啊&#xff0c;我是董董灿。 AI 绘画的效果是真的不错&#xff0c;最近在查找AI相关技术文章时&#xff0c;总是会时不时的发现一些好玩的 AI 应用&#xff0c;而且大多数都是免费的。 今天就给大家介绍如何使用 MidJourney 来完成 AI 绘画的网站。 MidJourney 本身是…

6种有效的时间序列数据特征工程技术(使用Python)

在商业分析中&#xff0c;"时间"是一个核心概念。我们基于时间组件来分析销售数据、收入、利润、增长&#xff0c;甚至进行预测。然而&#xff0c;对于初学者来说&#xff0c;这可能是一个复杂的主题。在处理时间敏感的数据集时&#xff0c;需要考虑时间序列数据的多…

Unet改进12:添加PCONV||减少冗余计算和同时存储访问

本文内容:添加PCONV 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 为了设计快速的神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,我们观察到FLOPs的这种减少并不一定会导致类似程度的延迟减少。这主要源于低效率的每秒浮点操作数(FLOP…

STM32——GPS模块(GY-NEO-6M)

1连接 1-1 使用 USB-TTL 工具&#xff0c;安装好驱动&#xff0c;可以在”设备管理器看到对应COM”按照如下链接测试模块&#xff1a; USB-TTL GPS 模块 3.3V--------------------------------->VCC GND------------------------------>GND RXD--------------------…

Linux安装Hadoop(单机版)详细教程

目录 一、JDK安装 1、下载JDK安装包 2、解压下载的JDK安装包 3、移动并重命名JDK包 4、配置Java环境变量 5、验证安装是否成功 二、Hadoop安装 1、下载Hadoop安装包 2、解压Hadoop安装包 3、配置Hadoop环境变量 4、修改配置文件 5、验证Hadoop是否安装成功 三&…

使用3D数字人做视频

用3D数字人做视频 漂亮精致 3D数字人定制4 动作流畅、音乐上的表现 thatgirl 支持私人定制模型 你愿意捐献所有的财产吗 想搭建这样的数字人的请和我们联系 使用3D数字人做视频https://www.jinshuangshi.com/forum.php?modviewthread&tid248 (出处: 金双石科技)

力扣经典题目之->二叉树的前序遍历(中序后序同理)

一&#xff1a;题目 解释&#xff1a; 1&#xff1a; 题目的要求就是我们return 一个数组&#xff0c;该数组里面的元素及其顺序就是 前序遍历二叉树 的元素及其顺序 比如&#xff1a;示例1的树&#xff0c;前序遍历的顺序应该是1 2 3&#xff0c;那么return 的数组里面的元素…

智慧高校迎新服务平台的设计与实现---附源码92489

摘要 随着高校规模的不断扩大和新生人数的增加&#xff0c;传统的手工登记和管理方式已经无法满足高效、准确的需求。为了提升高校新生报到迎新工作的效率和质量&#xff0c;本研究设计开发了一套基于SSM框架的智慧高校迎新服务平台的设计与实现。系统通过信息技术的应用&#…

12-使用gateway作为微服务网关

本文介绍spring gateway的使用&#xff0c;包括配置文件的使用和调试跟踪&#xff0c;让大家了解spring gateway的基本用法。如果不了解什么是微服务网关&#xff0c;就先查查资料&#xff0c;网关相对来说是比较重要的微服务组件。 0、环境 springboot 2.4.2springcloud gat…