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

贪心算法学习——加油站

目录

一,题目

二,题目接口

 三,解题思路及其代码


一,题目

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

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

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

二,题目接口

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {}
};

 三,解题思路及其代码

1.暴力解法

   其实对于这道题很容易想到的便是一个暴力解法,这个暴力解法的大概思路便是对每一个下标下进行试验,如果我的这个下标在经过一圈之后能回到我原来的下标的话,那么我这个下标便是能够符合条件的。

 如何找到符合条件的下标呢?

1.若该下标的rest+gas[i]-cost[i]是整数那我便可以到达下一个加油站。

2.为了防止我的下标越界,必须有%n的操作(n是数组的长度)。

代码:

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int n = gas.size();//计算长度int startPos = 0;//从零开始出发for(int i = 0;i<n;i++)//遍历找正确的加油站{startPos = i;int rest = 0;//记录车箱里剩余的油while(gas[startPos%n]+rest>=cost[startPos%n]&&startPos<2*n)//若符合条件便可到达下一个加油站{rest = gas[startPos%n] - cost[startPos%n]+rest;//记录剩余的油startPos++;int pos =  startPos%n;if(pos == i)//判断是否回到出发时的加油站处{return i;//回到了便可以返回这个加油站的下标}}}return -1;//没有这样的加油站便返回-1}
};

对于暴力解法,肯定是会超时的:

所以我们就得开始写一个贪心的解法。

2.贪心解法:

如何实现贪心呢?先来举个例子:

比如我的gas = [5,1,2,3,4],cost = [4,4,1,5,1]

我们可以先来计算一下这两个数组之间的差用一个diff数组记录下来:diff = [1,-3,1,-2,3]

首先我们先以第一个1位起点:

因为我们的1是一个正数,所以我可以往后走。但是在遇到-3时我的1+(-3)为负数,所以我就不能再往下走了,这时贪心的地方便来了,我就得从-3的下一位开始走了。

仿照这个思路改造一份贪心代码,并注意越界问题,代码如下:

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int n = gas.size();int rest = 0;for(int i = 0;i<n;i++){int rest = 0;int step = 0;for( ;step<n;step++){rest = rest+gas[(i+step)%n]-cost[(i+step)%n];if(rest<0){break;}}if(rest>=0){return i;}i+=step;//加step步,再加上for里面的++便是增加step+1步!!!}return -1;}
};

过啦:

http://www.lryc.cn/news/208159.html

相关文章:

  • Android 字符串工具类
  • 有了InheritableThreadLocal为啥还需要TransmittableThreadLocal?
  • 结构伪类选择器
  • java-- 静态数组
  • 世界经济论坛:ChatGPT等生成式AI,对全球23%岗位产生巨大影响
  • myTracks for Mac:GPS轨迹记录器的强大与便捷
  • Macos视频增强修复工具:Topaz Video AI for mac
  • 如何在IDEA中配置指定JDK版本?轻松解决!!!
  • 思维导图软件 ConceptDraw MINDMAP mac中文特色介绍
  • PDF编辑工具Acrobat Pro DC 2023中文
  • 如何开通 Medium会员
  • CDN是如何一步步壮大到现在这样的
  • 【Java】电子病历编辑器源码(云端SaaS服务)
  • 解决netty作为web,post请求体过大导致413 Request Entity Too Largew问题
  • 【Linux】rpm和yum的使用
  • 贪心算法学习——最大数
  • next项目部署到云服务器上(手动)
  • CG Magic分享3dmax软件安装与打开文件转圈圈怎么办?
  • 京东(天猫)数据分析:2023下半年茶饮料市场高速增长,东方树叶一骑绝尘
  • 软件测试之【单元测试、系统测试、集成测试】
  • 安装 tensorflow==1.15.2 遇见的问题
  • OJ刷题 第十八篇(递归篇)
  • 互联网产品说明书指南,附撰写流程与方法
  • 从JVM方面解释java传递问题
  • Oracle查询用户所有表的语句
  • Python轮廓追踪【OpenCV形态学操作】
  • 安全狗安装
  • HTTP发起请求与收到响应的大致过程
  • c++继承的小细节
  • 【分享】7-Zip压缩包的密码可以取消吗?