当前位置: 首页 > news >正文

力扣题解(加油站)

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;
    }
};

相关文章:

  • 浅谈【数据结构】图-图的遍历
  • 8.26 T4 日记和编辑器(fhq维护kmp——kmp本身含有的单射与可合并性)
  • JS WebSocket 深度解析
  • forEach和map遍历大数据,到底谁更快?实践出真知
  • 字符串压缩算法
  • 相机坐标系转换世界坐标系,zedimudepth
  • WSL-ubuntu下载安装配置cudnn
  • AutoGPT开源项目解读
  • spyglass-lint关闭(disable/stop/waiver)规则
  • 书生.浦江大模型实战训练营——(十三)茴香豆:企业级知识库问答工具
  • Android高级UI --- canvas
  • Android 12中读写SD卡,提示Operation not permitted问题处理
  • AI嵌入式人工智能开发 --- 【1】初始RKNPU
  • word、pdf、excel及zip加密(含示例效果及工具类)
  • 5 大场景上手通义灵码企业知识库 RAG
  • dma 和 mmap 的区别和联系
  • 【系统架构设计】测试评审方法
  • OSPF路由协议详解
  • 2025秋招大语言模型落地实践面试题
  • 更改了ip地址怎么改回来
  • 魔都眼|买买买,老铺黄金新店开业被挤爆:有人排队5小时
  • 美国经济萎缩意味着什么?关税政策如何反噬经济?
  • 五一期间全国高速日均流量6200万辆,同比增长8.1%
  • 4月一二线城市新房价格环比上涨,沪杭涨幅居百城前列
  • 国务院食安办:加强五一假期食品生产、销售、餐饮服务环节监管
  • 荣盛发展股东所持1.17亿股将被司法拍卖,起拍价约1.788亿元