贪心 Leetcode 134 加油站

news2024/11/18 3:41:42

加油站

Leetcode 134

学习记录自代码随想录

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

示例 1:
输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
输出: 3
解释:
从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油
开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油
开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油
开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油
开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油
开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
因此,3 可为起始索引。

示例 2:
输入: gas = [2,3,4], cost = [3,4,3]
输出: -1
解释:
你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。
我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油
开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油
开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油
你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
因此,无论怎样,你都不可能绕环路行驶一周。

提示:
gas.length == n
cost.length == n
1 <= n <= 105
0 <= gas[i], cost[i] <= 104

20230813 dj原题

要点:1.想到用rest记录为每站到下站的剩余油量,即每个i对应的剩余油量值;
2.cur_sum记录rest的和,当cur_sum出现负值则意味着起始位置不能在之前的站,从i+1开始重新记录cur_sum,假设 a ∈ ( 0 , i ) a\in(0,i) a(0,i),且从a开始cur_sum >= 0,又因为0-i的cur_sum < 0,则0-a的cur_sum 一定小于0,这样就矛盾了,所以要想cur_sum一直>=0,只能从i+1开始;
在这里插入图片描述

3.total_sum为总rest和,当total_sum<0则肯定不能走完一圈。

class Solution{
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost){
        int cur_sum = 0;
        int total_sum = 0;
        int start = 0;
        int rest = 0;
        int n = gas.size();
        // rest记录为每站到下站的剩余油量
        // cur_sum记录rest的和,当cur_sum出现负值则意味着起始位置不能在之前的站,从i+1开始重新记录cur_sum
        // total_sum为总rest和,当total_sum<0则肯定不能走完一圈
        for(int i = 0; i < n; i++){
            rest = gas[i] - cost[i];
            total_sum += rest;
            cur_sum += rest;
            if(cur_sum < 0){
                cur_sum = 0;
                start = i + 1;
            }
        }
        if(total_sum < 0) return -1;

        return start;
    }
};

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

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

相关文章

企业内部培训考试系统题库导入功能设计

企业内部培训考试系统可自建题库&#xff0c;企业可以将已有的试题资源快速导入系统&#xff0c;系统具备智能选题功能&#xff0c;可以根据预设条件自动从题库中抽取试题&#xff0c;生成试卷&#xff0c;可以充分利用已有的教育资源&#xff0c;避免重复劳动&#xff0c;提高…

sc-MAVE

Deep-joint-learning analysis model of single cell transcriptome and open chromatin accessibility data单细胞转录组和开放染色质可及性数据的深度联合学习分析模型 在同一个细胞中同时分析转录组和染色质可及性信息为了解细胞状态提供了前所未有的解决方案。然而&#x…

[java] 23种设计模式之桥接模式

一、什么是桥接模式 桥接(Bridge)模式属于结构型设计模式。通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。把抽象(abstraction)与行为实现(implementation)分离开来&#xff0c;从而可以保持各部分的独立性以及应对它们的功能扩展。 二、适用场景 当一…

计算机专业必看的十部电影

计算机专业必看的十部电影 1. 人工智能2. 黑客帝国3. 盗梦空间4. 社交网络5. Her6. 模仿游戏7. 斯诺登8. 头号玩家9. 暗网10. 网络迷踪 计算机专业必看的十部电影&#xff0c;就像一场精彩盛宴&#xff01; 《黑客帝国》让你穿越虚拟世界&#xff0c;感受高科技的魅力《模仿游戏…

SDR架构 (一)为什么基带有I和Q路?

我之前做过自己的RTL-SDR。一直有一个疑惑。为啥rtl2832u芯片有一对差分I路&#xff0c;还有一对差分Q路。差分很好理解是为了抗干扰&#xff0c;但为啥要I和Q呢&#xff1f;并且我也知道不少人在自己修改的时候&#xff0c;保留I路对接在r820t2&#xff08;跟原版一样&#xf…

重学SpringBoot3-@EnableConfigurationProperties注解

重学SpringBoot3-EnableConfigurationProperties注解 1. 引言2. EnableConfigurationProperties 的作用3. 使用示例4. 总结 1. 引言 Spring Boot 提供了一种便捷的方式来管理和校验应用程序的配置&#xff0c;即通过类型安全的配置属性。EnableConfigurationProperties 注解在…

【论文】Continuous Rapid Action Value Estimates阅读笔记

之前在阅读KR-UCT论文时&#xff0c;里面提到过与UCT结合的主要两种启发式方法旨在指导探索策略&#xff0c;通过使用渐进拓宽&#xff08;PW&#xff09;限制考虑的行动的数量&#xff0c;并使用快速行动价值估计&#xff08;RAVE&#xff09;选择最有前途的行动。因此找了一篇…

C++模板完整版

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) {int temp left…

[SpringCloud] OpenFeign核心架构原理 (一)

Feign的本质: 动态代理 七大核心组件 Feign底层是基于JDK动态代理来的, Feign.builder()最终构造的是一个代理对象, Feign在构建对象的时候会解析方法上的注解和参数, 获取Http请求需要用到基本参数以及和这些参数和方法参数的对应关系。然后发送Http请求, 获取响应, 再根据响…

需求评审会常见的5大核心问题

需求评审会是项目管理过程中的一个重要环节&#xff0c;其核心问题的顺利讨论和评审&#xff0c;对项目来说非常重要。其有助于项目成员对需求理解达成共识&#xff0c;明确需求的内容、目标和预期结果&#xff0c;尽早发现需求不合理之处&#xff0c;从而能够及时调整和完善&a…

物联卡禁止个人使用是有原因的,技术层面给大家深度分析一下

运营商禁止物联卡个人使用是硬性规定&#xff0c;但是现在很有很多不法商贩在倒卖物联卡给个人&#xff0c;套路是很多的&#xff0c;小编之前的文章里有几篇深度介绍&#xff0c;大家可以搜索看一下&#xff0c;今天就从技术层面来给大家详细分析一下为什么物联卡不适合个人使…

智慧社区养老:Java与SpringBoot的技术融合

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

华为OD机试真题C卷-篇6

100分值题 宽度最小的子矩阵部门人力分配电脑病毒感染会议室占用时间段路口最短时间问题5G网络建设 宽度最小的子矩阵 给定一个n行 * m列的矩阵&#xff1b;给定一个k个整数的数组k_list&#xff1b;在n*m的矩阵中找一个宽度最小的子矩阵&#xff0c;该子矩阵包含k_list中所有…

从0到1全流程使用 segment-anything

从0到1全流程使用 segment-anything 一、安装 anaconda 一、下载 anaconda 二、以管理员身份运行安装 1、勾选 Just Me 2、统一安装路径(后续 python 等包也安装至此目录) 3、勾选 add to path 然后安装即可。 三、修改 Anaconda 默认路径及默认缓存路径 Anaconda 默认下…

反向代理多级多机

一 架构图 本次实验需要 5台机器 第一台 nginx 只做代理服务器 负责反向代理 加 负载均衡 后面的两台nginx 做真实服务器 处理静态资源 再后面的 tomcat 做真实服务器 处理动态资源 二 具体实验 &#xff08;一&#xff09; 具体实验环境 所有机器关闭防火墙 安装…

第一天 走进Docker的世界

第一天 走进Docker的世界 介绍docker的前世今生&#xff0c;了解docker的实现原理&#xff0c;以Django项目为例&#xff0c;带大家如何编写最佳的Dockerfile构建镜像。通过本章的学习&#xff0c;大家会知道docker的概念及基本操作&#xff0c;并学会构建自己的业务镜像&…

【性能测试】Jmeter性能压测-阶梯式/波浪式场景总结(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、阶梯式场景&am…

Spring中Bean的作用域、实例化方式、生命周期、循环依赖问题

Spring中Bean的作用域、实例化方式、生命周期、循环依赖问题 一、Bean的作用域1.singleton2.prototype3.其他scope值 二、Bean的实例化方式1.通过构造方法实例化2.通过简单工厂模式实例化3.通过factory-bean实例化4.通过FactoryBean接口实例化5.BeanFactory和FactoryBean的区别…

车载主机中控屏_车载平板电脑|车载后装定制方案

现代汽车已经成为人们生活中不可或缺的交通工具&#xff0c;车载中控屏作为汽车信息娱乐和导航系统的重要组成部分&#xff0c;更是受到了越来越多车主的重视。而一款优秀的车载主机中控屏&#xff0c;不仅需要具备强大的性能和功能&#xff0c;还需要具备高性价比和更低的耗电…

深入探索Java线程管理:Thread类的全面指南

&#x1f31f; 欢迎来到我的博客&#xff01; &#x1f308; &#x1f4a1; 探索未知&#xff0c;分享知识 &#x1f4ab; **&#x1f31f; 欢迎来到我的博客&#xff01; &#x1f308;****&#x1f4a1; 探索未知&#xff0c;分享知识 &#x1f4ab;**深入探索Java线程管理&…