欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > Python3刷算法来呀,贪心系列题单

Python3刷算法来呀,贪心系列题单

2025/1/8 20:30:33 来源:https://blog.csdn.net/2301_80052985/article/details/144981530  浏览:    关键词:Python3刷算法来呀,贪心系列题单
1.7号题单 

1、​​​​​​k次取反后最大值
2、柠檬水找零
3、分发糖果

  

示例 1:

输入:ratings = [1,0,2]
输出:5
解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。

示例 2:

输入:ratings = [1,2,2]
输出:4
解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。

 思路:1、每个人分到1颗糖果

2、从左向右,若 ratings[i​]>ratings[i−1​],则第 i 名学生糖比第 i−1 名学生多 1 个。

3、(再从右向左),如果 ratings[i] > ratings[i + 1],此时res[i](第i个小孩的糖果数量)就有两个选择了,一个是res[i + 1] + 1(从右边这个加1得到的糖果数量),一个是res[i](之前比较右孩子大于左孩子得到的糖果数量)。

class Solution:def candy(self, ratings: List[int]) -> int:n = len(ratings)num = [1]*n# 左到右for i in range(1,n):if ratings[i]>ratings[i-1]:num[i] = num[i-1]+1for i in range(n-2,-1,-1): #[n-2,-1) ,步长 -1if ratings[i]>ratings[i+1]:num[i] = max(num[i],num[i+1]+1)return sum(num)

4、根据升高重建队列

实例1:

输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]

示例 2:

输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]
输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]

 思路:1.先按高度h降序排,再按数量k升序排(停下来想想是不是),这里可以用lambda函数

`lambda x:(第一位降序 -x[0],第二位升序 x[1] )`

2.使用一个数组res,用于存入每次的数据;

3.核心:n表示新的res长度,第二位p[1]大于n,插入到res指定位置;小于等于直接append加入res

class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:# p[h,k] 先h降序排,再k升序排;减少插入次数res = []people = sorted(people,key = lambda x:(-x[0],x[1] ))for p in people:if len(res) <= p[1]: #长度小于kres.append(p)elif len(res) > p[1]:res.insert(p[1],p)return res

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com