Leetcode 134 加油站

news2025/3/3 3:05:48

题意理解

        给定n个站点,两个数组gas表达每个站点可加的油量,cost表达到下一站点所需耗费的油量。

        gas = [1,2,3,4,5], cost = [3,4,5,1,2]

        要求从下表为i的站点开始,刚好能支撑汽车在每个站点转一圈后回到出发位置。

        

解题思路

        当前站剩余油量累计-下一站耗油<0,行程被迫中止,前几站到到该站剩余的油量不足以支撑这几站的油量耗费,我们需要选择新的起始位置。

        此时我们选择当前站的下一站作为起始站,重新开始。

注意

        我们总是重复此过程。则不会出现到此处行程截止,但中间存在可完成行程的开始节点。

        

        假设

                位置2处截止,开往下一节点剩余油<0,但是存在位置1处开始到位置2,开往下一节点后剩余油>0,

        那么

                必然存在位置0->位置1,从位置1开往下一节点剩余油<0,

        因为

                我们总是在开往下一节点剩余油<0时,更换起始节点

        

                从位置0-位置2,不存在一个可开始的位置1,使位置1到位置2,开往下一节点剩余油>0。

        所以

                当开往下一节点剩余油<0时,将当前节点的下一个节点作为起始节点是合理的。   

        其次

                若所有站点油和<所有路程耗费,则说明任何一个节点开始都无法完成形成,返回下标-1.

1.贪心解题

public int canCompleteCircuit(int[] gas, int[] cost) {
        int start=0;
        int curGos=0;
        int totalGos=0;
        for(int i=0;i< gas.length;i++){
            //当起始位置到此处时,开往下一节点剩余油<0,行程截止
            if(curGos<0){
                //更换起始位置,重新开始计算
                curGos=0;
                start=i;
            }
            curGos+=(gas[i]-cost[i]);
            totalGos+=(gas[i]-cost[i]);//记录所有行程耗油剩余量
        }
        //若所有节点耗油剩余量<0,则从任何节点开始都走不完行程。
        if(totalGos<0) return -1;
        return  start;
    }

2.分析

时间复杂度:O(n)

空间复杂度:O(1)

n表示输入数组的大小

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

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

相关文章

Deployment Controller详解(上)

上一篇在《Kubectl 部署无状态应用》中介绍了如何使用 Deployment 部署五个 hello world 实例时&#xff0c;我们并没有详细探讨 Deployment Controller 的各项功能。因此&#xff0c;本文将深入介绍 Deployment Controller 的作用以及它能够完成的任务。 本文来自官方文档梳理…

CAS机制

Java中提供了很多原子操作类来保证共享变量操作的原子性。这些原子操作的底层原理都是使用了CAS机制。在使用一门技术之前&#xff0c;了解这个技术的底层原理是非常重要的&#xff0c;所以本篇文章就先来讲讲什么是CAS机制&#xff0c;CAS机制存在的一些问题以及在Java中怎么使…

浅谈测试自动化selenium之POM模式

基于本人也是一个初学者&#xff0c;在运用POM模式的时候记录一下自己的学习笔记。 如果你是大神&#xff0c;那么可以略过&#xff0c;如果你是初学者&#xff0c;希望对你有帮助。 本文阐述了以下几个问题&#xff1a; 什么叫POM模式 为什么要用POM模式 POM模式的思想 POM模…

前端案例—antdDesign的Select多选框组件加上全选功能

前端案例—antdDesign的Select多选框组件加上全选功能。 实现效果如下&#xff1a; Select 组件里有这个属性&#xff0c;可以利用这个对下拉菜单进行自定义。 const handleChange (e, value) > {setSelectState(e.target.checked)let arr productOptions?productOption…

AI绘画中CLIP文本-图像预训练模型

介绍 OpenAI 在 2021 年提出了 CLIP&#xff08;Contrastive Language–Image Pretraining&#xff09;算法&#xff0c;这是一个先进的机器学习模型&#xff0c;旨在理解和解释图像和文本之间的关系。CLIP 的核心思想是通过大规模的图像和文本对进行训练&#xff0c;学习图像…

口碑好的国产主食冻干猫粮品牌有哪些?盘点十大放心猫粮国产名单

冻干猫粮可以帮助猫咪摄入更多的水分&#xff0c;因为冻干是高蛋白质的食物&#xff0c;当猫咪吃了冻干猫粮后&#xff0c;会感到口渴&#xff0c;从而更主动地去喝水。对于那些不喜欢喝水的猫咪&#xff0c;可以将冻干复水后再喂给它们&#xff0c;这样也可以增加猫咪的水分摄…

Keil5软件仿真 定时器互补通道 波形输出(Logic Analyzer)

步骤一&#xff1a;管脚配置确认。 ①配置定时器的管脚模式为复用推挽输出模式&#xff08;GPIO_MODE_AF_PP&#xff09;&#xff01;&#xff01;&#xff01;&#xff0c;注意&#xff1a;复用开漏模式软件仿真时无波形。 步骤二&#xff1a;编译程序。 ①点击编译按钮。 …

【泛型中K T V E? Object等分别代表什么含 义】

✅ 泛型中K T V E? Object等分别代表什么含义 ✅ 典型解析✅代码示例 ✅ 典型解析 E - Element (在集合中使用&#xff0c;因为集合中存放的是元素) T-Type (Java 类) K- Key (键) V - Value (值) N - Number (数值类型) ? - 表示不确定的iava类型 (无限制通配符类型) …

机器学习:手撕 AlphaGo(一)

图 1-1: AphaGo 结构概览 1. 前言 AlphaGo 是一个非常经典的模型&#xff0c;不论从影响力还是模型设计上。它的技术迭代演进路径&#xff1a;AlphaGo&#xff0c;AlphaGoZero&#xff0c;AlphaZero&#xff0c;MuZero 更是十分精彩。相信有很多同学因为听了 AlphaGo 的故事对…

中国化妆品头部企业环亚集团携美肤宝、法兰琳卡、滋源、肌肤未来等“新朋友”加入实在智能数智生态圈

广州环亚化妆品科技股份有限公司&#xff08;以下简称“环亚集团”&#xff09;是一家综合性美容化妆品高新技术企业&#xff0c;旗下拥有美肤宝、法兰琳卡、滋源、肌肤未来等多个品牌&#xff0c;产品涵盖洁肤护肤、洗护发、身体护理、精油等多个领域。在中国、澳大利亚、美国…

upset 绘制

好久没有更新,今天来一个upset图的绘制 1.1 安装包 #绘制upset的包现在看来有三个 ## UpSet ### 最基本的upsetR包,使用方便,但是扩展不方便 devtools::install_github("hms-dbmi/UpSetR") ## complex-upset ### UpSet的升级款 支持ggplot2 devtools::install_git…

Multi-value PBS

参考文献&#xff1a; [CIM19] Carpov S, Izabachne M, Mollimard V. New techniques for multi-value input homomorphic evaluation and applications[C]//Topics in Cryptology–CT-RSA 2019: The Cryptographers’ Track at the RSA Conference 2019, San Francisco, CA, …

【C#】TimeSpan

文章目录 概述属性时间计算拓展来源 概述 TimeSpan结构&#xff1a;表示一个时间间隔。 它含有以下四个构造函数&#xff1a; TimeSpan(Int64)将 TimeSpan结构的新实例初始化为指定的刻度数。&#xff08;DateTime.Tick:是计算机的一个计时周期&#xff0c;单位是一百纳秒&…

饥荒Mod 开发(十七):手动保存和加载,无限重生

饥荒Mod 开发(十六)&#xff1a;五格装备栏 饥荒Mod 开发(十八)&#xff1a;Mod 添加配置选项 饥荒游戏会自动保存&#xff0c;本来是一个好的机制&#xff0c;但是当角色死亡的时候存档会被删除&#xff0c;又要从头开始&#xff0c;有可能一不小心玩了很久的档就直接给整没了…

计算机网络——物理层概述(二)

前言&#xff1a; 前面已经对计算机网络的概述有了一个简单的认识与了解了&#xff0c;什么是计算机网络&#xff0c;为什么学习计算机网络&#xff0c;计算机网络的概念与体系结构我们已经有了一个初步的认识与了解&#xff0c;现在我们要对计算机网络中的物理层进行一个学习与…

基于YOLOv8深度学习的智能玉米害虫检测识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

C语言的scanf输入函数的介绍分享

各位少年&#xff1a; 我来分享一个输入函数&#xff0c;scanf函数 是输入的函数&#xff0c;scanf&#xff08;“参数1”&#xff0c;参数2);好&#xff0c;我们接着看代码的例子 int main() { int score0; printf("请输入成绩:"); scanf("%d",&sco…

关于YOLOv5的训练,GPU单卡、多卡设置,加速训练

yolov5毫无疑问是目前目标检测框架中非常准确快速的检测框架之一&#xff0c;在工业界和学术界应用广泛&#xff0c;其优势不言而喻。 在模型训练或推理时&#xff0c;我们都想快速完成&#xff0c;特别是数据量很大的时候&#xff0c;效率就是非常迫切需要提升的。这里简单介…

【MAC、IOS】charles抓包配置教程,亲测有效

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Python并行编程详解:发挥多核优势的艺术

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在当今计算机时代&#xff0c;充分发挥多核处理器的性能是提高程序运行效率的关键。Python作为一门强大的编程语言&#xff0c;提供了多种并行编程工具和库。本文将深入介绍Python中的并行编程&#xff0c;探讨如…