贪心算法学习——加油站

news/2025/3/31 23:46:24/

目录

一,题目

二,题目接口

 三,解题思路及其代码


一,题目

在一条环路上有 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.ppmy.cn/news/1179926.html

相关文章

Docker 搭建 LNMP + Wordpress

[TOC](Docker 搭建 LNMP Wordpress 一、项目介绍1.1、项目环境1.2、 服务器环境1.3、 任务需求 二、部署Nginx2.1、建立工作目录2.2、 编写 Dockerfile 脚本2.3、准备 nginx.conf 配置文件2.4、生成镜像2.5、创建自定义网络 三、部署Mysql3.1、建立工作目录3.2、编写 Dockerfi…

浅谈安科瑞可编程电测仪表在老挝某项目的应用

摘要&#xff1a;本文介绍了安科瑞多功能电能表在老挝某项目的应用。AMC系列交流多功能仪表是一款专门为电力系统、工矿企业、公用事业和智能建筑用于电力监控而设计的智能电表。 Abstract&#xff1a;This article introduces the application of the multi-function energy …

【网络】想学TCP,这一篇就够了 —— TCP理论知识详解(基于前面手搓TCP服务端博客的补充)

TCP理论 前言正式开始TCP报文如何进行分离和封装TCP如何将有效载荷交付给上层如何理解TCP的可靠性TCP报头中的序号和确认序号&#xff08;简单过一下&#xff0c;后面还会详细讲&#xff09;只要序号不要确认序号行不行乱序问题 16位窗口大小TCP的全双工通信方式16位窗口大小的…

mysql 字符串分隔符通过循环获取数据

//定义字符串 DECLARE v_userids VARCHAR(10000) DEFAULT 111#222#333#444; //解析后存放在此 DECLARE v_mailarray VARCHAR(10000) DEFAULT ; IF Length(v_userids) > 0 THEN A:WHILE i < Length(v_userids) - Length(REPLACE(v_userids, #, )) 1 do …

【axios】axios的基本使用

一、 Axios简介 1、 Axios是什么&#xff1f; Axios是一个基于promise的HTTP库&#xff0c;类似于jQuery的ajax&#xff0c;用于http请求。可以应用于浏览器端和node.js&#xff0c;既可以用于客户端&#xff0c;也可以用于node.js编写的服务端。 2.、Axios特性 支持Promis…

关于高并发你必须知道的几个概念

&#x1f388;个人公众号:&#x1f388; :✨✨✨ 可为编程✨ &#x1f35f;&#x1f35f; &#x1f511;个人信条:&#x1f511; 为与不为皆为可为&#x1f335; &#x1f349;本篇简介:&#x1f349; 本篇记录高并发必须知道的几个概念&#xff0c;如有出入还望指正。 关注公众…

FL Studio水果2023体验版如何破解?

FL Studio是一款非常专业的水果工具&#xff0c;软件功能齐全&#xff0c;拥有编曲、剪辑、录音、混音等功能&#xff0c;可以满足用户的各种音乐制作需求。软件已经成功破解&#xff0c;全中文的软件界面&#xff0c;去除了试用时间限制&#xff0c;有需要的快来下载吧&#x…

使用DBSyncer实现增量Mysql到Mysql的数据同步_DBSyncer1.2.4版本---数据同步之DBSyncer工作笔记006

之前都是用来postgresql到mysql的同步,需要配置postgresql的复制槽,对于mysq来说,需要配置: mysql启用binlog: https://gitee.com/ghi/dbsyncer/wikis/%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C/%E6%97%A5%E5%BF%97%E9%85%8D%E7%BD%AE%EF%BC%88%E6%95%B0%E6%8D%AE%E6%BA%90%EF%B…