力扣题解(加油站)

server/2024/9/23 10:25:19/

134. 加油站

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

思路:

从i位置开始,用step表示可以移动的距离,当step=n的时候,表示可以走一圈,则返回i即可。利用a记录从i位置开始走step步后所剩下的汽油,若a>=0,则表示还能继续走,反之,则表示已经没油了,这样的话从i位置就不能实现走一圈。

优化:

当a<0的时候,可以知道在上述思路的情况下,是从i+1位置重新出发,但是从i位置到i+step不能通过,则从i+1位置到i+step一定也不能通过,因为既然可以从i到i+step,就表示i位置一定是能出发的,这就意味着gas[i]>=cost[i],而去掉gas[i]和cost[i]所带来的影响后,到从i+1到i+step的a一定更小,因为失去了gas[i]-cost[i]>0,因此可以直接从i+step+1位置处重新开始寻找。

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {//  //n^2做法//  int n=gas.size();//  int l=0,r=0;//  for(int i=0;i<n;i++)//  {  //     int flag=0;//     int begin=i;//     int allgas=gas[i];//      while(1)//      {//         allgas-=cost[begin];//         if(allgas<0)//         break;//         begin++;//         begin%=n;//           if(begin==i)//      return i;//         allgas+=gas[begin];//      }//  }//  return -1;//n的做法?int n=gas.size();for(int i=0;i<n;i++){int a=0;int step=0;for(;step<n;step++){int index=(i+step)%n;a=a+gas[index]-cost[index];if(a<0){   break;}}if(a>=0)return i;i+=step;}return -1;}
};


http://www.ppmy.cn/server/108379.html

相关文章

Day51 | 117. 软件构建(拓扑排序)47. 参加科学大会 dijkstra(朴素版)

语言 117. 软件构建 117. 软件构建 题目 题目描述 某个大型软件项目的构建系统拥有 N 个文件&#xff0c;文件编号从 0 到 N - 1&#xff0c;在这些文件中&#xff0c;某些文件依赖于其他文件的内容&#xff0c;这意味着如果文件 A 依赖于文件 B&#xff0c;则必须在处理…

远程教学必备神器:热门远程控制软件大盘点

不知道你有没有过&#xff0c;需要远程帮小伙伴处理电脑或者手机问题的时候&#xff0c;很多时候直接语言口述&#xff0c;不一定能解决当下的问题。我往往是使用远程控制工具直接实操加语音&#xff0c;让对方能够更快地走出困境&#xff0c;这次我就分享几款我常用的远程控制…

如何在知行之桥上通过业务单号查找原始报文?

在知行之桥中接收或发送的数据通常是EDI原始报文&#xff0c;知行之桥会对EDI原始报文进行格式转换&#xff0c;以方便用户后端系统的处理。因此&#xff0c;一般情况下&#xff0c;用户看到的都是转换后的数据结构&#xff0c;例如Json、XML或Excel等&#xff0c;无需直接查看…

算法的学习笔记—数字序列中的某一位数字(牛客JZ44)

&#x1f600;前言 在编程面试中&#xff0c;遇到的问题往往需要我们高效处理大规模的数据或序列。今天我们要讨论的是一个典型的问题&#xff1a;如何在一个连续的数字序列中找到指定位置的数字。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f600;数字序列中…

使用Hutool操作Excel的时候出现的问题(压缩比问题)

今天在使用Hutool操作Excel的时候&#xff0c;出现了一个问题&#xff0c;导致操作失败。 错误原因如下&#xff1a; cn.hutool.poi.exceptions.POIException: IOException: Zip bomb detected! The file would exceed the max. ratio of compressed file size to the size o…

C语言深度复习【数组和指针】

目录 一.数组和指针 1.1 数组指针 1.2 指针数组 1.3 函数指针 1.4 const和指针 1.5 sizeof和指针和数组 1.6 strlen和字符数组 一.数组和指针 1.1 数组指针 一个数组指针实际上是指指向数组的指针。当你有一个数组类型作为函数参数时&#xff0c;它在函数内部被当作一个…

oracle物理存储结构文件详解

文章目录 oracle物理文件结构图① 控制文件&#xff1a;② 数据文件&#xff1a;③ 联机Redo日志文件&#xff1a;④ 参数文件&#xff1a;⑤ 归档文件&#xff1a;⑥ 密码文件&#xff1a; oracle物理文件结构图 Oracle数据库的物理结构由控制文件&#xff08;Control f…

C#性能驱动的内存处理:使用 Span<T> 和 Memory<T> 提升代码效率

本文示例内容&#xff1a; 分割数据&#xff1a;示例中将一个整数数组分割成两个部分&#xff0c;展示了如何使用 Span<T>.Slice 方法来获取数组的不同切片。计算数据&#xff1a;计算数组每个部分的总和&#xff0c;展示了如何利用 Span<T> 来遍历和处理数据。修…