算法训练营day28--134. 加油站 +135. 分发糖果+860.柠檬水找零+406.根据身高重建队列

一、 134. 加油站

题目链接:https://leetcode.cn/problems/gas-station/
文章讲解:https://programmercarl.com/0134.%E5%8A%A0%E6%B2%B9%E7%AB%99.html
视频讲解:https://www.bilibili.com/video/BV1jA411r7WX

1.1 初见思路

  1. 得模拟分析出,先计算每个加油站的汽油数量和消耗汽油数量的差值,再进行后续的分析

1.2 具体实现

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int curSum = 0;int totalSum = 0;int index = 0;for (int i = 0; i < gas.length; i++) {curSum += gas[i] - cost[i];totalSum += gas[i] - cost[i];if (curSum < 0) {// 当前累加rest[i]和 curSum一旦小于0index = (i + 1) % gas.length ; // 起始位置更新为i+1curSum = 0; // curSum从0开始}}if (totalSum < 0) return -1; // 说明怎么走都不可能跑一圈了return index;}
}

1.3 重难点

  • 这个题目不太好模拟

二、 135. 分发糖果

题目链接:https://leetcode.cn/problems/candy/
文章讲解:https://programmercarl.com/0135.%E5%88%86%E5%8F%91%E7%B3%96%E6%9E%9C.html
视频讲解:https://www.bilibili.com/video/BV1ev4y1r7wN

2.1 初见思路

  1. 首先找到评分最低的孩子,从他们开始分一个糖果
  2. 再逐个向两边扩散

2.2 具体实现

class Solution {
/**分两个阶段1、起点下标1 从左往右,只要 右边 比 左边 大,右边的糖果=左边 + 12、起点下标 ratings.length - 2 从右往左, 只要左边 比 右边 大,此时 左边的糖果应该 取本身的糖果数(符合比它左边大) 和 右边糖果数 + 1 二者的最大值,这样才符合 它比它左边的大,也比它右边大*/public int candy(int[] ratings) {int length = ratings.length;int[] arr = new int[length];int result=0;Arrays.fill(arr,1);for(int j=0;j<length-1;j++){if(ratings[j+1]>ratings[j]){arr[j+1]=arr[j]+1;}}for(int j=length-2;j>=0;j--){if(ratings[j]>ratings[j+1]){arr[j]=Math.max(arr[j+1]+1,arr[j]);}}for(int i=0;i<length;i++){result+=arr[i];}//int result = Arryas.sum(arr);return result;}
}

2.3 重难点

  • 不能在考虑局部的时候想两边兼顾,这样会顾此失彼;
  • 采用了两次贪心的策略,一次是从左到右遍历,只比较右边孩子评分比左边大的情况、一次是从右到左遍历,只比较左边孩子评分比右边大的情况

三、 860.柠檬水找零

题目链接:https://leetcode.cn/problems/lemonade-change/
文章讲解:https://programmercarl.com/0860.%E6%9F%A0%E6%AA%AC%E6%B0%B4%E6%89%BE%E9%9B%B6.html
视频讲解:https://www.bilibili.com/video/BV12x4y1j7DD

3.1 初见思路

  1. 目的是找零,设置三个数来统计三种面额的钱的剩余数量
  2. 找零的优先顺序是先找面额大的,也就是10美元,没有10美元再找5美元的

3.2 具体实现

class Solution {public boolean lemonadeChange(int[] bills) {int fiveNum=0;int tenNum=0;for(int i=0;i<bills.length;i++){if(bills[i]==5){fiveNum++;}if(bills[i]==10){if(fiveNum==0){return false;}fiveNum--;tenNum++;}if(bills[i]==20){if(tenNum>0 && fiveNum>0){tenNum--;fiveNum--;}else if(tenNum==0 && fiveNum>=3){fiveNum-=3;}else{return false;}}}return true;}
}

3.3 重难点

四、 406.根据身高重建队列

题目链接:https://leetcode.cn/problems/queue-reconstruction-by-height/
文章讲解:https://programmercarl.com/0406.%E6%A0%B9%E6%8D%AE%E8%BA%AB%E9%AB%98%E9%87%8D%E5%BB%BA%E9%98%9F%E5%88%97.html
视频讲解:https://www.bilibili.com/video/BV1EA411675Y

4.1 初见思路

  1. 需要考虑两个因素,身高和k,所以需要 控制变量,先按照身高排序

4.2 具体实现

class Solution {public int[][] reconstructQueue(int[][] people) {// 身高从大到小排(身高相同k小的站前面)Arrays.sort(people, (a, b) -> {if (a[0] == b[0]) return a[1] - b[1];   // a - b 是升序排列,故在a[0] == b[0]的狀況下,會根据k值升序排列return b[0] - a[0];   //b - a 是降序排列,在a[0] != b[0],的状况会根据h值降序排列});LinkedList<int[]> que = new LinkedList<>();for (int[] p : people) {//按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点que.add(p[1],p);   //Linkedlist.add(index, value),会将value插入到指定index裡。}return que.toArray(new int[people.length][]);}
}

4.3 重难点

  • 为什么按照k为下标重新插入队列就可以了?
    因为按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。
  • 使用LinkedList的效率更高,因为这里频繁使用插入操作,LinkedList的底层是链表,所以插入操作的性能远高于ArrayList
    在这里插入图片描述

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

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

相关文章

如何抓取和处理天气网站数据

目的 在进行气象研究时&#xff0c;获取准确的历史天气数据是至关重要的。本文将分享如何从天气网站收集数据并将其转化为表格形式&#xff0c;以便于后续分析。然而&#xff0c;在直接抓取数据时&#xff0c;可能会遇到API接口保护的问题。本文将详细解释解决这些问题的步骤&…

“Pandas数据处理与分析:实用技巧与应用“

目录 # 开篇 1. pandas的series的了解 1.1 pd.Series 创建 1.2 pd.series 的索引使用 1.3 pd.series 之字典/索引 1.4 pandas 转换数据类型 1.5 pandas 通过索引或者通过位置来取值 1.6 pandas 指定行取值 1.7 pands之Series 切片和索引 1.8 pands之Series 的索引和值…

Python基础教学之三:函数与模块篇——实现代码重用和模块化

Python基础教学之三&#xff1a;函数与模块篇——实现代码重用和模块化 一、函数的定义与使用 1. 理解函数 函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码块。它可以提高代码的重用性和程序的清晰度。 你可以定义一个由自己想要功能的函数&#xff0c;以下是…

交易伦敦银系统,听说高手都有一套

成功的伦敦银交易者都有一套自己的交易系统&#xff0c;这个系统为他们提供了一个明确的、可重复的决策框架&#xff0c;无论白银市场如何波动&#xff0c;他们都能按照既定的规则和策略进行操作&#xff0c;避免了情绪化决策和随意交易——这样的一致性有助于减少错误和亏损&a…

Androd 12 (MTK)修改屏幕物理分辨率Physical Size

1.需求说明 Android目前显示分辨率为480*800&#xff0c;立项表中像素为720*1280。请修改屏幕分辨率到指定大小。 2.思路分析 如果从手机修改对应的分辨率&#xff0c;必须自上而下的进行修改分为两个层面进行修改。 1.驱动底层 2.软件上层 3.结局方法与相关说明 查看当…

安全防御---防火墙实验1

安全防御—防火墙实验1 一、实验拓扑与要求 要求&#xff1a; 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00-18:00)可以访问&#xff0c;生产区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 …

企业注册商标步骤

企业注册商标&#xff1a;详细步骤与关键要点 在当今商业环境中&#xff0c;商标已成为企业品牌建设和市场竞争中不可或缺的一部分。它不仅是企业身份的象征&#xff0c;也是企业知识产权的重要组成部分。 一、确定注册商标的商品项目 首先&#xff0c;企业需要明确需要注册商…

【游戏引擎之路】登神长阶(七)——x86汇编学习:凡做难事,必有所得

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-7月1日&#xff1a;攻克《Windows游戏编程大师技巧》。 7月…

Go语言---文件分类、设备文件、磁盘文件、实现打开/写/读/关闭/拷贝文件

设备文件: 屏幕(标准输出设备) fmt.Println()往标准输出设备写内容 键盘(标准输入设备) fmt.Scan()从标准输入设备读取内容 磁盘文件&#xff0c;放在存储设备上的文件 文本文件&#xff1a;以记事本打开&#xff0c;能看到内容(不是乱码) 二进制文件&#xff1a;以记事本打开…

微信右上角的“+”号,竟然能做这些事?90%的人不知道

微信&#xff0c;作为一款集社交、支付、娱乐于一体的超级应用&#xff0c;它的每一次更新都吸引着亿万用户的目光。 在微信的众多功能中&#xff0c;右上角的""号图标看似普通&#xff0c;实则隐藏着许多不为人知的实用技巧。本文将从四个方面深入挖掘这些隐秘功能…

打包时提示:Missing Gradle Project Information.或者在加载gradle时出错

1.Android打包弹出错误提示框&#xff1a;missing gradle project information. please check if the IDE successfully synchronized its state with the Gradble project model. 2.加载gradle出错&#xff1a;修复报错后 File -> Sync Project with Gradle Files

用JavaScript将 NCR(Numeric Character Reference)标记转换为对应字符的方法

0 &#xff0c 、&#11111……是什么鬼&#xff1f; 最近&#xff0c;要将一些网页内容复制到<textarea>文本框中作进一步处理&#xff0c;发现有些网页内容中包含&#xff0c或之类的标记&#xff0c;会被原样复制到<textarea>文本框中。 如果将这些网页内容直…

Codeforces Round #956 (Div. 2) and ByteRace 2024(A~D题解)

这次比赛也是比较吃亏的&#xff0c;做题顺序出错了&#xff0c;先做的第三个&#xff0c;错在第三个数据点之后&#xff0c;才做的第二个&#xff08;因为当时有个地方没检查出来&#xff09;所以这次比赛还是一如既往地打拉了 那么就来发一下题解吧 A. Array Divisibility …

text prompt如何超过77个词

【深度学习】sdwebui的token_counter,update_token_counter,如何超出77个token的限制?对提示词加权的底层实现_prompt中token权重-CSDN博客文章浏览阅读1.6k次,点赞26次,收藏36次。文章探讨了如何在StableDiffusionProcessing中处理超过77个token的提示,涉及token_counte…

公司网站建站模板源码系统 响应式网站模版 随心自定义 带完整的代码包以及搭建部署教程

系统概述 公司网站建站模板源码系统是一套基于最新技术开发的网站建设解决方案。该系统集成了众多先进的网站开发工具和功能模块&#xff0c;旨在帮助企业快速构建出美观、实用的公司网站。通过采用模块化设计&#xff0c;系统实现了高度可定制性&#xff0c;企业可以根据自身…

土木转行嵌入式,拿到一家初创公司的嵌入式研发offer,值得去吗

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;不论从未来行业的发展前景…

java项目如何配置不同环境变量 以及 原理

如何配置不同的profile 首先&#xff0c;一个java项目&#xff0c;需要有不同的环境配置&#xff0c;打包时&#xff0c;自动使用对应的配置。那么&#xff0c;如何实现呢&#xff1f; 在你的Spring Boot项目的src/main/resources目录下创建或添加一个application.yml文件。这…

纯CSS瀑布流

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>瀑布流布局</title> <style>/* 瀑布…

[论文精读]BrainLM: A foundation model for brain activity recordings

论文网址&#xff1a;pdf (openreview.net) 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 省流版 1.1. 心得 1.2…

redis批量删除keys,用lua脚本。

文章目录 现象解决方法 现象 系统报错&#xff1a; misconf redis is configured to save ....后查看机器内存。 是内存满了&#xff0c;需要删除其中的key 解决方法 (1) 编写一个脚本&#xff0c;放在redis-cli.exe同一个目录 (2) 脚本内容如下&#xff1a; -- 使用Lua脚…