【面试经典150 | 数组】加油站

news2024/11/25 15:52:49

文章目录

  • 写在前面
  • Tag
  • 题目来源
  • 题目解读
  • 解题方法
    • 方法一:暴力枚举
    • 方法二:一次遍历
  • 写在最后

写在前面

本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……

专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:

  • Tag:介绍本题牵涉到的知识点、数据结构;
  • 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
  • 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
  • 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
  • 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。

Tag

【一次遍历】【数组】


题目来源

面试经典150 | 134. 加油站


题目解读

在一个环形的路上有有限个加油站,在每个加油站可以获得相对应油,从一个油站前往下一个加油站需要消耗一些油。你可以从环形路上的任何一个加油站出发,向下一加油站方向进发,如果你能从某个加油站出发最后环绕一圈又回到了开始出发的加油站,请返回加油站的编号(从 0 开始),否则返回 -1

如果存在解,则保证它是唯一的。


解题方法

方法一:暴力枚举

我们遍历加油站,以每一个加油站作为起始出发,判断从哪一个起点出发可以环绕一圈。如果从某一个起点出发,可以顺利的跑完一圈,中途不会出现前往下一个加油站油不够的情况,那么这个起点就是唯一的答案。

容易想到的方法要么是实现起来较难,要么是时间复杂度太高,少有那种最容易想起来的方法就是最优的解法。暴力解法的时间复杂度为 O ( n 2 ) O(n^2) O(n2) n n n 为加油站的数量,本题的数据规模达到 1 0 5 10^5 105 O ( n 2 ) O(n^2) O(n2) 的时间复杂度一定超时。

方法二:一次遍历

rest = gas[i] - cost[i] 表示从 i 到达下一个加油站后剩余的油量(包括加油和消耗)。

特判情况:如果走完一圈剩下的油量小于 0,说明无论从哪个起点出发都不可能走完一圈,此时返回 -1

接下里对到达的加油站进行一次遍历,使用变量 start 记录出发位置,变量 currSum 表示从 0 到当前的 i 的剩余油量的累加和。如果 currSum < 0,表明在区间 [0, i] 内都不能作为出发的起点(因为在这个区间内选择任何一个起点,到加油站 i 都会断油),这时候出发的位置只能从 i+1 算起,我们还要更新 currSum = 0,开始新的累加。

最后,直接返回 start 即为唯一的出发起点。

特判情况,我们不需要独立计算走完一圈剩余的油量 totalSum,我们可以在一次遍历中进行计算。

实现代码

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int currSum = 0; 
        int totalSum = 0;   //记录走完一圈剩余的油量
        int start = 0;
        for (int i = 0; i < gas.size(); ++i) {
            int rest = gas[i] - cost[i];
            currSum += rest;
            totalSum += rest;
            if (currSum < 0) {
                start = i + 1;
                currSum = 0;
            }
        }

        // 走完一圈剩余的油量 < 0
        if (totalSum < 0) return -1;
        return start;
    }
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为加油站的数量。

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

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

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

相关文章

单元测试框架-Pytest(简单学习)

单元测试框架-Pytest Pytest是基于Python语言的单元测试框架&#xff0c;也是一个命令行的工具&#xff0c;比 unittest 测试框架更灵活。具有以下特点&#xff1a; 入门简单&#xff0c;易上手&#xff0c;官方文档丰富而且使用广泛&#xff0c;有大量的参数例子。 unittest…

2.索引操作

1. 创建索引 创建索引就等于创建数据库&#xff0c;ES使用put操作创建索引&#xff0c;我们创建一个students的索引&#xff0c;只需要发生put请求&#xff1a;http://127.0.0.1:9200/students 2. 查看索引 2.1 查看所有索引&#xff1a; 使用http://127.0.0.1:9200/_cat/ind…

抓包习讯云院校数据通过PHP解析导入数据库

前言 最近&#xff0c;打卡APP需要这个数据&#xff0c;通过抓包后发现这个数据是固定的&#xff0c;获取很简单&#xff0c;但是数据太多&#xff0c;手动导入不显示&#xff0c;于是分析了json格式后果断通过脚本完成 【推荐】 《【MQTT】Esp32数据上传采集&#xff1a;最…

搭建后台框架

一、引入依赖 项目的包层级关系如下 依赖引入 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&quo…

cloudCompare教程:三、点云保存格式、自带截图

如果你没有统计法线&#xff0c;保存的点云文件中也是没有法线的。 如下格式&#xff1a; 1 //X;Y;Z;Original_cloud_index;2;intensity;tree 2 1903 3 -2.96899939;43.87673187;0.12744403;1.000000;nan;8.000000;99.000000 4 -2.72843552;43.74015808;0.15977502;1.000000;…

S型速度曲线轨迹规划(已知速度和距离)

S型速度曲线规划的基础知识可以查看下面这篇博客&#xff1a; 带平滑功能的斜坡函数&#xff08;多段曲线控温纯S型曲线SCL源代码完整算法分析&#xff09;_RXXW_Dor的博客-CSDN博客PLC运动控制基础系列之梯形速度曲线&#xff0c;可以参看下面这篇博客&#xff1a;PLC运动控制…

2023-9-29 JZ33 二叉搜索树的后序遍历序列

题目链接&#xff1a;二叉搜索树的后序遍历序列 import java.util.*; public class Solution {int [] seq;public boolean VerifySquenceOfBST(int [] sequence) {if(sequence.length < 0) return false;this.seq sequence;return dfs(0, seq.length - 1);}public boolean …

在 Python 中列出虚拟环境

文章目录 在Python中列出虚拟环境使用lsvirtualenv命令使用Conda命令使用workon命令 总结 虚拟环境是一个独立的环境&#xff0c;我们可以在其中安装库、包、脚本和Python解释器。如果你的项目需要不同版本的库或Python解释器&#xff0c;你可以为每个项目创建单独的虚拟环境。…

51单片机数字电压表仿真设计_LCD显示(仿真+程序+原理图+PCB+设计报告+讲解)

51单片机数字电压表仿真设计_LCD显示&#xff08;仿真程序原理图PCB设计报告讲解&#xff09; 原理图&#xff1a;Altium Designer 仿真版本&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0006 51单片机数…

使用关键字abstract 声明抽象类-PHP8知识详解

抽象类只能作为父类使用&#xff0c;因为抽象类不能被实例化。抽象类使用关键字abstract 声明&#xff0c;具体的使用语法格式如下&#xff1a; abstract class 抽象类名称{ //抽象类的成员变量列表 abstract function 成员方法1(参数); //抽象类的成员方法 abstract functi…

UG\NX二次开发 用程序修改“用户默认设置”

文章作者:里海 来源网站:《里海NX二次开发3000例专栏》 简介 可以用程序修改“用户默认设置”吗?下面是用代码修改“用户默认设置->基本环境->用户界面->操作记录->操作记录语言”的例子。 效果 代码 #include <uf_defs.h> #include <NXOpen/NXExcept…

Kafka-Kerberos票据刷新问题

线上kafka使用了 kerberos 认证&#xff0c;每隔24小时&#xff0c;票据过期&#xff0c;无法自动续期&#xff0c;出现消息发送失败问题。 从日志可以发现会有如下报错&#xff1a; 2023-09-14 17:48:47,144 [kafka-kerberos-refresh-thread-kafka/hdp-1HADOOP.COM] [] WARN …

MNIST手写数字识别

MNIST是一个手写体数字的图片数据集&#xff0c;该数据集由美国国家标准与技术研究所&#xff08;National Institute of Standards and Technology (NIST)&#xff09;发起整理&#xff0c;其包含 60,000 张训练图像和 10,000 张测试图像&#xff0c;每张图片的尺寸为 28 x 28…

点亮一个LED+LED闪烁+LED流水灯——“51单片机”

各位CSDN的uu们好呀&#xff0c;这是小雅兰的最新专栏噢&#xff0c;最近小雅兰学习了51单片机的知识&#xff0c;所以就想迫不及待地分享出来呢&#xff01;&#xff01;&#xff01;下面&#xff0c;让我们进入51单片机的世界吧&#xff01;&#xff01;&#xff01; 点亮一个…

在线小说阅读系统

在线小说阅读系统&#xff1a; 功能实现 1.一级菜单&#xff1a;登录 注册 退出系统 2.二级菜单&#xff1a;查看小说列表 上传小说 下载小说 在线阅读 返回上级菜单 技术要点 1.面向对象思想 oop思想 2.TCP通信 &#xff1a;Socket通信&#xff08;这里用TCP&#xff0c;…

【C++】:类和对象(1)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关C中类和对象的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通…

Docker安装MS SQL Server并使用Navicat远程连接

思维导航 MS SQL Server简介 Microsoft SQL Server(简称SQL Server)是由微软公司开发的关系数据库管理系统,它是一个功能强大、性能卓越的企业级数据库平台,用于存储和处理大型数据集、支持高效查询和分析等操作。SQL Server 支持广泛的应用程序开发接口(API),包括 T-S…

vue ant 两个页面 调用同一个接口 想在 前端的一个 接口传 一个固定的值 ,另外一个不变 ,查询条件默认值加上自己要的就好啦

vue ant 两个页面 调用同一个接口 想在 前端的一个 接口传 一个固定的值 &#xff0c;另外一个不变 查询条件默认值加上自己要的就好啦

【中秋国庆不断更】OpenHarmony多态样式stateStyles使用场景

Styles和Extend仅仅应用于静态页面的样式复用&#xff0c;stateStyles可以依据组件的内部状态的不同&#xff0c;快速设置不同样式。这就是我们本章要介绍的内容stateStyles&#xff08;又称为&#xff1a;多态样式&#xff09;。 概述 stateStyles是属性方法&#xff0c;可以根…

BUUCTF reverse wp 76 - 80

[CISCN2018]2ex 四处游走寻找关键代码 int __fastcall sub_400430(int a1, unsigned int a2, int a3) {unsigned int v3; // $v0int v4; // $v0int v5; // $v0int v6; // $v0unsigned int i; // [sp8h] [8h]unsigned int v9; // [sp8h] [8h]int v10; // [spCh] [Ch]v10 0;for…