代码随想录算法训练营第二十九天| leetcode134. 加油站、leetcode135.分发糖果、leetcode860.柠檬水找零、leetcode406.根据身高重建队列

news/2024/11/29 12:00:22/文章来源:https://www.cnblogs.com/csfy0524/p/18576290

1 leetcode134. 加油站

题目链接:134. 加油站 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:贪心算法,得这么加油才能跑完全程!LeetCode :134.加油站_哔哩哔哩_bilibili

思路:其实这道题我有思路了,但是不知道怎么写,感觉太暴力了,就是找到花费最小的那个位置且汽油足够往下走的地方,开始走,然后循环,写的话,我不知道怎么写了,只能看视频了

1.1 视频后的思路

嗯,感觉自己把这个想复杂了,没有想到局部变量和全局变量的关系

class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:cursum=0totalsum = 0start = 0for i in range(len(gas)):cursum +=gas[i]-cost[i]totalsum += gas[i] - cost[i]if cursum<0:cursum = 0start = i+1if totalsum<0:return -1return start

1.2 本题小结

  1. 这道题目就是没想到用全局和局部来统计,就卡住了,不知道怎么往后面写能把题目写出来
  2. 其实贪心主要问题还是局部最优和全局最优应该怎么找,很多时候会忘记这个

2 leetcode135.分发糖果

题目链接:135. 分发糖果 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:贪心算法,两者兼顾很容易顾此失彼!LeetCode:135.分发糖果_哔哩哔哩_bilibili

思路:有一种之前做题目,找这个数据是不是摆动数的思路,但是写的话我不知道怎么写

2.1 视频后的思路

写的时候,自己忘了左边比右边大的情况,要对这个数值求最大值的操作,这里自己写的时候也出了一点小Bug

class Solution:def candy(self, ratings: List[int]) -> int:candy_l = [1]*len(ratings)for i in range(1,len(ratings)):if ratings[i]>ratings[i-1]:candy_l[i] = candy_l[i-1]+1for i in range(len(ratings)-2,-1,-1):if ratings[i+1]<ratings[i]:candy_l[i] = max(candy_l[i+1]+1,candy_l[i])return sum(candy_l)

2.2 本题小结

  1. 每次一到那种倒序遍历的时候,就很容易超出索引,我的想法,证明练习的题目还是不够多,需要再加强
  2. 这道题开始真的想的是,如何使用左右两边比较,摆动数列的方法来写,后来发现吧有点行不通

3 leetcode860.柠檬水找零

题目链接:860. 柠檬水找零 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:贪心算法,看上去复杂,其实逻辑都是固定的!LeetCode:860.柠檬水找零_哔哩哔哩_bilibili

思路:就是局部找最优,最后如果没有的话,就进行删除的操作,代码有些复杂,但是实现了

3.1 自己的方法

其实应该可以简化的,但是思路应该就是这样的了

class Solution:def lemonadeChange(self, bills: List[int]) -> bool:money_num = []for i in range(len(bills)):money_num.append(bills[i])if bills[i]==10:if 5 in money_num:money_num.remove(5)else:return Falseelif bills[i] == 20:count_file = money_num.count(5)if (5 in money_num) and (10 in money_num):money_num.remove(5)money_num.remove(10)elif count_file>=3:for i in range(3):money_num.remove(5)else:return Falsereturn True

3.2 视频后的方法

这个方法的代码,优点在于统计就可以节省很多空间了,但是思路和我之前的想法其实是一样的

class Solution:def lemonadeChange(self, bills: List[int]) -> bool:five = 0ten = 0for i in bills:if i == 5:five +=1if i==10:if five == 0:return Falsefive-=1ten +=1if i==20:if five>0 and ten>0:five -=1ten -=1elif five>=3:five-=3else:return Falsereturn True

3.3 本题小结

  1. 终于自己写出来一道题目啦,但是我的思路有一点点复杂
  2. 其实这个用计数统计的方法和用数列的方法是一模一样的,所以两者都行的通

4 leetcode406.根据身高重建队列

题目链接:406. 根据身高重建队列 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:贪心算法,不要两边一起贪,会顾此失彼 | LeetCode:406.根据身高重建队列_哔哩哔哩_bilibili

思路:二维的数,瞬间没思路了,,,,

4.1 视频后的方法

听了,我明白了为什么,但是呢,还是不知道怎么写,懵逼

class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:people.sort(key=lambda x:(-x[0],x[1]))que = []for i in people:que.insert(i[1],i)return que

4.2 本题小结

  1. 题目简单确实很简单,但是呢,思路还是不好想,首先就是看到了二维数组,我就不会了,就不知道怎么写了
  2. 一个匿名函数的定义方法key=lambda x:函数
  3. 二维数组的知识,就有一种增加了一个维度,我就彻底蒙蔽了的感觉

5 今日小结

  1. 首先自己尝试写出来了一道题目,这是一种进步吧,希望继续可以保持下去
  2. 二维数组的题目,时常是搞不清维度就不知道怎么往后去开发了,但是看了讲解以后,我好像就明白了为什么
  3. 贪心的题目,主要思路就是从局部最优中找到全局最优,根据这个思路很多题目就可以做出来

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

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

相关文章

hhdb数据库介绍(10-6)

升级中心 功能入口: 登录管理用户界面->页面右上角升级中心点击【添加升级任务】按钮可进入升级中心发起一次升级任务,具体如下:计算节点升级 计算节点升级为管理平台对计算节点版本提供在线升级的功能。满足对单节点、主备节点、多节点和容灾模式集群的跨版本或小版本升…

hhdb数据库介绍(10-5)

审计日志 管理用户界面的审计日志主要用来查看管理用户对管理平台的操作记录,同时可查看所有纳管的计算节点集群内普通用户的基本操作。 管理员操作 可以查看所有管理用户在管理平台的操作。可以在页面的操作类型下拉框中按操作类型过滤查看。访问IP和操作内容支持模糊查找。 …

SpringBoot集成MyBatis-Plus实现多数据源操作

添加依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version></parent><dependencies><dependency><groupId>org.springf…

测试ActiveMqAA

入门概述 MQ 种类和对比MQ 就是消息中间件。MQ 是一种理念,ActiveMQ 是 MQ 的落地产品。不管是哪款消息中间件,都有如下一些技术维度:MQ 消息的详细比较各类 MQ 的擅长领域MQ 种类 变成语言 擅长领域kafka scala 大数据领域的主流 MQ。rabbitmq erlang 基于 erlang 语言,不…

P1407 [国家集训队] 稳定婚姻

[国家集训队] 稳定婚姻 题目描述 我们已知 \(n\) 对夫妻的婚姻状况,称第 \(i\) 对夫妻的男方为 \(B_i\),女方为 \(G_i\)。若某男 \(B_i\) 与某女 \(G_j\) 曾经交往过(无论是大学,高中,亦或是幼儿园阶段,\(i \le j\)),则当某方与其配偶(即 \(B_i\) 与 \(G_i\) 或 \(B_j…

ThinkPHP日志记录

ThinkPHP 的日志功能记录参数 Controller use think\facade\Log;public function index() {// 获取请求参数$params = request()->param(); // 获取所有参数(GET、POST、PUT等)// 打印参数到日志Log::info(接口请求参数: . json_encode($params));//或者指定文件夹名称Lo…

Clip模型使用

代码文件结构clip.py model.py

博客园皮肤设置 - 第二版

基本设置侧边栏 <div> <marquee direction="left" bgcolor="#e66465" scrollamount="30" scrolldelay="450" width="100%" height="30" style="line-height:30px;color:#fff;">不能太贪心,…

hhdb数据库介绍(9-28)

计算节点参数说明 readOnly 参数说明:Property Value参数值 readOnly是否可见 否参数说明 是否为只读模式默认值 falseReload是否生效 是参数设置: <property name="readOnly">false</property><!-- 是否为只读模式 -->参数作用: 用于设置当前计…

hhdb数据库介绍(9-29)

计算节点参数说明 secureFilePriv 参数说明:Property Value参数值 secureFilePriv是否可见 否参数说明 Load data或into outfile时文件的本地读取/写入路径(绝对路径)默认值 空Reload是否生效 是参数设置: server.xml中secureFilePriv参数如下配置: <property name=&qu…

leetcode39 组合总和

leetcode39 组合总和思路: 这题也是用回溯,但是考虑到不能重复,所以用一个currentNum记录当前遍历到哪了,按照大小顺序遍历防止重复就行。 class Solution {//11:10-11:18public void dfs(int[] candidates,List<List<Integer>> ans,int currentNum,List<…

hhdb数据库介绍(9-27)

计算节点参数说明 ndbSqlAddr & ndbSqlUser & ndbSqlPass 参数说明:Property Value参数值 ndbSqlAddr是否可见 是参数说明 NDB SQL端IP地址默认值 localhost:3329Reload是否生效 否Property Value参数值 ndbSqlUser是否可见 是参数说明 NDB SQL前端用户名默认值 rootR…