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](之前比较右孩子大于左孩子得到的糖果数量)。

python 复制代码
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]+1
       for i in range(n-2,-1,-1): #[n-2,-1) ,步长 -1
        if 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

python 复制代码
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]: #长度小于k
                res.append(p)
            elif len(res) > p[1]:
                res.insert(p[1],p)
        return res

              
相关推荐
宇努力学习3 分钟前
如何本地部署seepseek
python·ai·ollama·deepseek
橙狮科技9 分钟前
使用 GPTQ 进行 4 位 LLM 量化
人工智能·python·语言模型
开开心心就好17 分钟前
娱乐使用,可以生成转账、图片、聊天等对话内容
windows·python·智能手机·软件工程·娱乐·软件需求
愚昧之山绝望之谷开悟之坡19 分钟前
ragflow-RAPTOR到底是什么?请通俗的解释!
python
背太阳的牧羊人26 分钟前
RAG检索中使用一个 长上下文重排序器(Long Context Reorder) 对检索到的文档进行进一步的处理和排序,优化输出顺序
开发语言·人工智能·python·langchain·rag
ITPUB-微风28 分钟前
美团MTSQL特性解析:技术深度与应用广度的完美结合
java·服务器·开发语言
007_rbq34 分钟前
XUnity.AutoTranslator-Gemini——调用Google的Gemini API, 实现Unity游戏中日文文本的自动翻译
人工智能·python·游戏·机器学习·unity·github·机器翻译
Want59539 分钟前
C/C++跳动的爱心
c语言·开发语言·c++
水瓶丫头站住39 分钟前
Qt中QDockWidget的使用方式
开发语言·qt
laimaxgg1 小时前
Qt常用控件之数字显示控件QLCDNumber
开发语言·c++·qt·qt5·qt6.3