LeetCode-题目整理【7】

加油站和分发糖果都使用到贪心算法

  1. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和
    cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。
    示例 1:
    输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
    输出: 3
    解释:
    从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油
    开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油
    开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油
    开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油
    开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油
    开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
    因此,3 可为起始索引。
    示例 2:
    输入: gas = [2,3,4], cost = [3,4,3]
    输出: -1
    解释:
    你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。
    我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油
    开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油
    开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油
    你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
    因此,无论怎样,你都不可能绕环路行驶一周。
func canCompleteCircuit(gas []int, cost []int) int {totalGas := 0currentGas := 0start := 0for i := 0; i < len(gas); i++ {currentGas = currentGas + gas[i] - cost[i] //目的是找到开始的位置totalGas = totalGas + gas[i] - cost[i]  //判断是否可以绕一圈if currentGas < 0 {start = i + 1currentGas = 0}}if totalGas < 0 {return -1}return start
}// 可以使用贪心算法来解决。我们可以从任意一个加油站出发,一直往前行驶,直到我们无法继续前进为止。// 算法步骤如下:// 初始化两个变量 totalGas 和 currentGas,分别表示从起点到当前加油站的总汽油量和当前剩余的汽油量,初始值都为 0。
// 初始化一个变量 start,表示起点加油站的编号,初始值为 0。
// 遍历加油站,从第一个加油站开始:
// 将当前和之前的加油站的汽油量加到 totalGas 中。
// 将当前加油站的消耗汽油量从 currentGas 中减去。
// 如果 currentGas 小于 0,说明当前的起点加油站无法到达下一个加油站。
// 将 start 更新为下一个加油站的编号。
// 将currentGas 重新初始化为 0。
// 否则,继续向下一个加油站前进。
// 如果 totalGas 大于等于0,说明从起点出发可以绕环路行驶一周,返回 start;否则,返回 -1。// 通过遍历加油站,计算累计的汽油量和消耗的汽油量,通过判断当前剩余的汽油量是否小于 0 来确定起点加油站。如果累计的汽油量大于等于0,说明可以绕环路行驶一周,返回起点加油站的编号,否则返回 -1。// 这个算法的时间复杂度是 O(n),其中 n 是加油站的数量。
  1. 分发糖果
    n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
    你需要按照以下要求,给这些孩子分发糖果:
    每个孩子至少分配到 1 个糖果。
    相邻两个孩子评分更高的孩子会获得更多的糖果。
    请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
    示例 1:
    输入:ratings = [1,0,2]
    输出:5
    解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。
    示例 2:
    输入:ratings = [1,2,2]
    输出:4
    解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。
    第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。
//贪心算法
func candy(ratings []int) int {n := len(ratings)// 初始化一个长度为n的糖果数组candies,用来记录每个孩子分配的糖果数。初始时,每个孩子至少分配一个糖果,所以我们将candies数组的所有元素都初始化为1。candies := make([]int, n)for i := 0; i < n; i++ {candies[i] = 1}// 从左往右遍历,保证右边评分更高的孩子糖果数比左边多for i := 1; i < n; i++ {if ratings[i] > ratings[i-1] {candies[i] = candies[i-1] + 1}}// 从右往左遍历,保证左边评分更高的孩子糖果数比右边多,并取两次遍历中较大的糖果数for i := n - 2; i >= 0; i-- {if ratings[i] > ratings[i+1] {candies[i] = max(candies[i], candies[i+1]+1)}}// 计算总糖果数total := 0for _, candy := range candies {total += candy}return total
}// 采用贪心算法的思路。// 首先,我们初始化一个长度为n的糖果数组candies,用来记录每个孩子分配的糖果数。初始时,每个孩子至少分配一个糖果,所以我们将candies数组的所有元素都初始化为1。// 然后,我们从左到右遍历孩子的评分。如果右边的孩子评分比当前孩子高,那么我们将右边孩子的糖果数设置为当前孩子的糖果数加一。这个过程保证了右边评分更高的孩子会获得更多的糖果。// 接着,我们从右到左遍历孩子的评分。如果左边的孩子评分比当前孩子高,那么我们将左边孩子的糖果数设置为当前孩子的糖果数加一,并取两次遍历中较大的糖果数。这个过程保证了左边评分更高的孩子会获得更多的糖果。// 最后,我们计算所有孩子的糖果数的总和,即为最少需要准备的糖果数目。// 这个算法的时间复杂度为O(n),其中n为孩子的数量。我们需要进行两次遍历来保证相邻两个孩子评分更高的孩子获得更多的糖果,而每次遍历的时间复杂度为O(n)。// 通过贪心算法的思路,我们可以在一次遍历中解决这个问题,而不需要使用动态规划等复杂的算法。

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

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

相关文章

pyspark学习_RDD转为DataFrame

#方法1&#xff1a;反射机制推断RDD模式 people.txt Tom 12 Jack 13 Janny 14 from pyspark.sql import SparkSession,Row spark SparkSession.builder.getOrCreate() lines spark.sparkContext.textFile("people.txt") people lines.map(lambda x:x.split("…

Nginx日志检测分析工具 - WGCLOUD

WGCLOUD可以对Nginx的日志文件进行全面分析&#xff0c;包括IP、sql注入攻击、搜索引擎蜘蛛爬取记录、HTTP响应状态码、访问量最高的IP统计、扫描攻击统计等 效果如下图

C#winform上位机开发学习笔记13-串口助手显示系统时间功能添加

1.功能描述 在上位机中显示系统的实时时间 2.代码部分 步骤1&#xff1a;添加文本框控件并设置参数 #此处注意将BackColor颜色修改为非Control&#xff0c;即可正常显示ForeColor颜色&#xff0c;否则该颜色不变&#xff0c;原因暂且不明。 步骤2&#xff1a;添加timer控件…

Linux/Doctor

Enumeration nmap 已知目标开放了22,80,8089端口&#xff0c;扫描详细情况如下 可以看到对外开放了22,80,8089三个端口 TCP/80 SSTI 访问80端口&#xff0c;有一个infodoctors.htb的电子邮件&#xff0c;点击其他的也没有什么反应&#xff0c;猜测有可能需要域名访问 在/et…

[每日一题] 01.25 - 子数整数

子数整数 k int(input()) flag False for i in range(10000,30001):a,b,c [int(str(i)[j:j 3]) for j in range(3)]if a % k 0 and b % k 0 and c % k 0:print(i)flag Trueif not flag:print(No)

美易平台:美股盘前动态:半导体股领涨,中概股表现各异

随着全球经济的波动和科技行业的快速发展&#xff0c;投资者对于股市的关注日益增加。近期&#xff0c;美国股市在盘前交易中呈现出了半导体股的普遍上涨态势。其中&#xff0c;英特尔&#xff08;Intel&#xff09;的股价上涨了1.6%&#xff0c;英伟达&#xff08;NVIDIA&…

Python批量采集亚马逊商品数据

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 知识点: 爬虫基本流程 非结构化数据解析 开发环境&#xff1a; python 3.8 解释器, 运行代码 pycharm 随便 配置 python解释器 DrissionPage >>> p…

前出深入-机器学习

文章目录 一、K近邻算法1.1 先画一个散列图1.2 使用K最近算法建模拟合数据1.3 进行预测1.4 K最近邻算法处理多元分类问题1.5 K最近邻算法用于回归分析1.6 K最近邻算法项目实战-酒的分类1.6.1 对数据进行分析1.6.2 生成训练数据集和测试数据集1.6.3 使用K最近邻算法对数据进行建…

阿里云服务器部署幻兽帕鲁联机服务器详细教程

幻兽帕鲁是一款备受欢迎的多人在线游戏&#xff0c;其联机服务器对于游戏的稳定运行至关重要。本文将详细介绍如何在阿里云服务器上部署幻兽帕鲁联机服务器&#xff0c;新手小白也能轻松搭建并管理自己的游戏环境。 还未购买阿里云服务器可以参照下面的步骤部署&#xff0c;已经…

Vue+OpenLayers7入门到实战:在地图上添加缩放控件、比例尺控件和鼠标经纬度位置显示控件

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 本章主要介绍如何使用OpenLayers7在地图上添加地图缩放控件,比例尺显示控件和鼠标经纬度位置展示控件这三个Control控件。 二、依赖和使用 "ol": "7.5.2"使用npm安装依赖npm install ol@7.5.…

Sql server强制走索引

遇到一个奇怪的问题&#xff0c;同样的SQL&#xff0c;只是一个where条件不一样&#xff0c;一个是column1 AAA&#xff0c;一个是column1 BBB&#xff0c;他们的查询效率却差距甚大&#xff0c;一个要60秒&#xff0c;一个1秒以下。查看查询计划&#xff0c;一个使用了索引&…

【SpringBoot】mybatis基础操作

mybatis入门 1.mybatis准备操作 创建数据库&#xff1a; CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4; -- 使⽤数据数据 USE mybatis_test; -- 创建表[用户表] DROP TABLE IF EXISTS userinfo; CREATE TABLE userinfo ( id INT ( 11 ) NOT NULL AUTO_INCRE…

LeetCode刷题---分隔链表

解题思路: 根据题意对链表进行分割 创建链表l用来表示小于给定值x的链表,创建辅助链表left指向l的初始节点 创建链表r用来表示大于等于给定值x的链表&#xff0c;创建辅助链表right指向r的初始节点 创建辅助链表cur&#xff0c;指向head节点 对原链表进行遍历 如果当前节点的va…

电商数据:新时代的商业智慧与决策之源

随着科技的飞速发展&#xff0c;电子商务已经深入到我们生活的方方面面。人们越来越依赖网络购物平台来满足生活中的需求&#xff0c;而这种转变不仅改变了消费者的购物习惯&#xff0c;更对整个商业环境产生了深远的影响。在这其中&#xff0c;电商数据作为这一变革的核心要素…

Flink多流转换(2)—— 双流连结

双流连结&#xff08;Join&#xff09;&#xff1a;根据某个字段的值将数据联结起来&#xff0c;“配对”去做处理 窗口联结&#xff08;Window Join&#xff09; 可以定义时间窗口&#xff0c;并将两条流中共享一个公共键&#xff08;key&#xff09;的数据放在窗口中进行配…

五、垃圾回收

1. 垃圾回收基础 1.1 什么是垃圾 简单说就是&#xff1a;内存中已经不再被使用到的内存空间就是垃圾。 1.2 如何判定是垃圾 1.2.1 引用计数法 引用计数法&#xff1a;给对象添加一个引用计数器&#xff0c;有访问就 1&#xff0c;引用失效就 -1 引用计数法的优缺点&#…

使用lora接收多个传感器数据方案设计

每个传感器的数据使用空格进行拼接&#xff0c;类似于"11 22 33 44 55"的字符串&#xff0c;Lora接收到字符串数据后&#xff0c;在循环中遍历接收到的数据字符串&#xff0c;使用一个二维数组存储数据&#xff0c;二维数组中的每一个一维数组为一个传感器的数据。当…

美易官方京东养车回应索赔事件:推动行业健康发展并携手品牌商家加码补贴

近日&#xff0c;一则关于途虎养车起诉京东索赔500万元的新闻引起了业界的广泛关注。据华尔街见闻1月25日报道&#xff0c;针对此事&#xff0c;京东养车相关负责人作出了回应。京东养车表示&#xff0c;“震虎价”并非针对特定企业&#xff0c;其核心目的在于通过提升效率来改…

抖音信息流广告引流,这种方法你要知道-数灵通

随着抖音的普及&#xff0c;我们经常会在刷视频的过程中遇到各种广告。这些广告不仅种类繁多&#xff0c;而且形式各异。除了常见的开屏广告和达人合作广告&#xff0c;信息流广告也是抖音广告的一种重要形式。那么&#xff0c;什么是信息流广告呢&#xff1f; 信息流广告是一种…

【.NET Core】深入理解任务并行库 (TPL)

【.NET Core】深入理解任务并行库 (TPL) 文章目录 【.NET Core】深入理解任务并行库 (TPL)一、概述二、数据并行&#xff08;任务并行库&#xff09;三、Parallel.For 循环示例四、Parallel.ForEach 循环示例五、处理并行循环中的异常六、数据并行总结6.1 不要假定并行的速度始…