贪心的问题合集(Leetcode题解-Python语言)

2023-11-07

贪心算法(Greedy Algorithm):是一种在每次决策时采用当前状态下最优或最好的策略,从而希望导致结果是最好或最优的算法。

455. 分发饼干

class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        g.sort(reverse=True)
        s.sort(reverse=True)
        p1, p2 = 0, 0
        ans = 0
        while p2 < len(s) and p1 < len(g):
            if s[p2] >= g[p1]:
                ans += 1
                p1 += 1
                p2 += 1
            else:
                p1 += 1
        return ans

思路不难,对饼干和孩子进行排序,由大到小,然后从最大的饼干和最大的孩子开始考虑:如果饼干能满足当前孩子,则计数加 1,考虑下一个饼干和孩子;如果不能满足,则考虑下一个孩子。直到孩子或者饼干考虑完为止。

860. 柠檬水找零

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

同样是分类讨论,如果收到 5 块则 5 块加 1,如果收到 10 块则找零 5 块(10块加1,5块减1),如果收到 20 块则优先使用 10 块 + 5 块找零,其次再考虑用 3 张 5 块找零,凡是无法找零都返回 False。

1005. K 次取反后最大化的数组和

class Solution:
    def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
        nums.sort()
        index = 0
        while index < len(nums) and k > 0 and nums[index] < 0:
            nums[index] = -nums[index]
            index += 1
            k -= 1
        if k > 0 and k % 2 != 0:
            return sum(nums) - 2 * min(nums)
        else:
            return sum(nums)

首先对数组排序,从小到大,然后取反先从负数开始(如果有的话),如果没有负数了,还剩余取反次数的话,就只考虑奇数的情况(偶数可以抵消),这时就对最小的正数(也是最小的数,因为没负数了)取反即可。

738. 单调递增的数字

class Solution:
    def monotoneIncreasingDigits(self, n: int) -> int:
        a = list(str(n))
        for i in range(len(a)-1,0,-1):
            if int(a[i]) < int(a[i-1]):
                a[i-1] = str(int(a[i-1]) - 1)
                a[i:] = '9' * (len(a) - i)  
        return int("".join(a)) 

考虑两个相邻数字的情况,如果左边的比右边大,则为了满足单调递增的条件,必定是左边的数减 1 而右边的数变成 9(因为要单调递增,所以右边所有数都变成 9)。从个位数(右边)向左开始考虑每一对数字的情况,当出现左边数减 1 时,右边的所有数字一定都变成 9。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

贪心的问题合集(Leetcode题解-Python语言) 的相关文章

随机推荐

  • Windows11安装kohya_ss详细步骤(报错、踩坑)

    文章目录 笔者环境 所需环境 安装kohya ss 方式一 带有GUI的kohya ss仓库 方式二 kohya ss核心仓库 题外话 笔者环境 OS windows11 Python 3 10 6 CUDA11 6 所需环境 Python
  • JavaEE初阶(5)多线程案例(定时器、标准库中的定时器、实现定时器、线程池、标准库中的线程池、实现线程池)

    接上次博客 JavaEE初阶 4 线程的状态 线程安全 synchronized volatile wait 和 notify 多线程的代码案例 单例模式 饿汉懒汉 阻塞队列 di Dora的博客 CSDN博客 目录 多线程案例 定时器 标
  • 云计算复习资料

    文章目录 第一章 云计算 一 云计算的概念与特征 1 云计算的概念 2 云计算的特征 3 云计算发展历程 二 云计算的服务类型 1 laaS 1 IaaS的核心技术 2 IaaS的服务优势 2 PaaS 1 PaaS的核心技术 2 PasS
  • SMOTE过采样技术原理与实现

    1 这种操作的原理是什么 目的是什么 目的是合成分类问题中的少数类样本 使数据达到平衡 其中 样本数量过少的类别称为 少数类 原理和思想 合成的策略是对每个少数类样本a 从它的最近邻中随机选一个样本b 然后在a b之间的连线上随机选一点作为
  • 正交矩阵的保范性:正交变换不改变向量的长度(范数)

    在推导使用SVD分解解方程时 用到了正交矩阵的保范性这一性质 1 正交矩阵定义 A mathbf A intercal A A A A
  • QT编程----事件(一)

    review ui 生成 h cpp文件 uic form1 ui o form1 h uic form1 ui i form1 h o form1 cpp C 三个特点 继承 重载 封装 QT程序设计进阶 事件 Qt事件 Qt程序是事件驱
  • JavaScript 根据指定年月获取该月的第一天和最后一天、获取上个月的年月、上个月月底日期

    文章目录 根据指定年月获取该月的第一天和最后一天 获取上个月的年月 上个月月底日期 根据指定年月获取该月的第一天和最后一天 let date new Date let new year date getFullYear 取当前的年份 let
  • Spring内置定时器的使用

    1 Spring内置定时器的使用 在configuration配置类中 引入 EnableSchedule 开启定时器 编写定时器类 在定时方法中添加 Schedule注解 并且使用fixedDelay fixedRate cron表达式用
  • 关于Unsupported major.minor version 52.0报错问题解决方案

    目录 1 问题描述 2 问题分析 3 解决方案 步骤一 删除JDK1 7版本 步骤二 导入JDK1 8版本 步骤三 将新的JDK1 8引入到工程中 4 总结 1 问题描述 在启动项目工程中 当编译class文件的时候会报错一个 java l
  • QClub大连站2013年第一期总结

    今天下午 QClub大连站2013年第一期如期举行 报名差不多50人 到场也有30多人 地点还在老地方 万恒商务大厦 我自己今天的状态不太好 女儿最近感冒 我也跟着有些上火 嗓子疼了三天了 今天开始有点儿咳嗽 还好不是特别严重 开场比较简单
  • python中系统找不到指定文件怎么办_PyCharm-错误-找不到指定文件python.exe的解决方法...

    1 现象 系统提示找不到指定的文件 Error running hello Cannot run program B pystudy venv Scripts python exe in directory python study Cre
  • 微前端解决方案

    目录 微前端解决方案 微前端的整体架构 微前端部署平台 微前端解决方案 在理想的情况下 期望能达到 将一个复杂的单体应用以功能或业务需求垂直的切分成更小的子系统 并且能够达到以下能力 子系统间的开发 发布从空间上完成隔离 子系统可以使用不同
  • debug跳出循环_Java基础-第04章:循环结构「云图智联」

    免费学习视频欢迎关注云图智联 https e yuntuzhilian com 1 什么是循环结构 1 1 为什么要学习循环结构 生活中 有很多 重复的去作某件事 的例子 旋转的钟表指针 滚动的车轮 日复一日的上课等等 同理 在程序中也有很
  • Python实现经纬度空间点DBSCAN聚类

    写在前面 博主前期科研工作中 涉及到要对某个地区的一些空间点进行聚类分析 想到读研期间 曾经用DBSCAN聚类算法实现了四线激光雷达扫描的三维点云数据聚类 论文题目 基于改进DBSCAN算法的激光雷达目标物检测方法 当初用matlab实现的
  • Spark SQL参数调优指南

    目录 1 运行行为 1 1 动态生成分区 1 2 broadcast join 使用hint强制做broadcastjoin 1 3 动态资源分配 1 4 Shuflle相关 1 5 读ORC表优化 2 executor能力 2 1内存 2
  • 独孤九剑第五式-朴素贝叶斯模型

    文章适合于所有的相关人士进行学习 各位看官看完了之后不要立刻转身呀 期待三连关注小小博主加收藏 小小博主回关快 会给你意想不到的惊喜呀 各位老板动动小手给小弟点赞收藏一下 多多支持是我更新得动力 文章目录 前言 朴素贝叶斯模型理论讲解 模型
  • 网络爬虫 - 6 JsonPath的使用方法与爬取案例

    1 json数据解析 1 json概念 JSON 是存储和交换文本信息的语法 类似 XML JSON 比 XML 更小 更快 更易解析 JSON 是纯文本 JSON 具有 自我描述性 人类可读 JSON 具有层级结构 值中存在值 JSON
  • Pytorch 学习(五):Pytorch 实现多层感知机(MLP)

    Pytorch 实现多层感知机 MLP 本方法总结自 动手学深度学习 Pytorch版 github项目 部分内容延续 Pytorch 学习 四 Pytorch 实现 Softmax 回归 实现方法 实现多层感知器 Multlayer Pe
  • Unity enabled & Single(关闭组件和单例)

    1 先获取需要关闭的组件 2 在代码中用获取组件的变量点出enabled 单例 单例类 内存中只能有一个 实例化的时候一定要new calss Single 单例 private static Single instance 私人化构造函数
  • 贪心的问题合集(Leetcode题解-Python语言)

    贪心算法 Greedy Algorithm 是一种在每次决策时采用当前状态下最优或最好的策略 从而希望导致结果是最好或最优的算法 455 分发饼干 class Solution def findContentChildren self g