代码随想录27期|Pthon|Day31|贪心算法|理论基础|455.分发饼干|376. 摆动序列|53. 最大子序和

news2025/7/19 11:29:07

理论基础

首先,贪心算法基本靠“做题感觉”,所以没有规范的总结和做题技巧,只能说见到过之后还能想起来。

一般情况可以看成是对于一个大的问题的子问题的局部最优的求解,然后可以推导出全局的最优。

这个过程没有证明,只能说在“认为没有反例”的情况下“试一试”。

 455. 分发饼干

从大饼干开始:先喂饱大的,然后再喂饱小的

都从最大的值开始遍历,for控制胃口,idx指向饼干,当且仅当找到小于饼干的胃口的时候idx往前移动,否则持续找更小的胃口。

从小饼干开始:先找到能满足第一个人的饼干

都从小的开始遍历,for控制饼干,idx指向胃口,找到一个满足的胃口之后idx再向后移动。

class Solution(object):
    def findContentChildren(self, g, s):
        """
        :type g: List[int]
        :type s: List[int]
        :rtype: int
        """
        if len(g) == 0 or len(s) == 0:
            return 0
        g.sort()
        s.sort()

        # 小饼干开始
        idx = 0
        for i in range(len(s)):
            if idx < len(g) and s[i] >= g[idx]:
                idx += 1
        return idx

        # 大饼干开始
        num_fed = 0
        idx = len(s)  - 1
        # 固定饼干idx找合适的胃口
        for i in range(len(g)-1, -1, -1):
            if g[i] <= s[idx] and idx >= 0:
                num_fed += 1
                idx -= 1
        return num_fed

376. 摆动序列

本题需要考虑的是多种情况的平坡(也就是差值不发生变化的时候)。

基本想法是比较前后两个差值和0的大小:

(1)第一种需要考虑差值为0,也就是遇到平坡的时候;
(2)另外一种是在上升的时候遇到平坡。

所以选择双指针的方法,使用一个cur和一个pre分别指向当前和之前的差值,和0进行比较。当且仅当差值出现波动(也就是更新了res)的时候更新pre的值。

class Solution(object):
    def wiggleMaxLength(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = 1
        cur_diff = 0
        pre_diff = 0
        if len(nums) <= 1:
            return len(nums)
        for i in range(len(nums) - 1):
            cur_diff = nums[i + 1] - nums[i]
            if (cur_diff > 0 and pre_diff <= 0) or (cur_diff < 0 and pre_diff >= 0):
                res += 1
                pre_diff = cur_diff  # 当且仅当res更新的时候才让pre向前走
        return res

53. 最大子数组和

思路:遍历 nums,从头开始用 count 累积,如果 count 一旦加上 nums[i]变为负数,那么就应该从 nums[i+1]开始从 0 累积 count 了,因为已经变为负数的 count,只会拖累总和。使用res记录当前最大值即可。

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = - float('inf')
        count = 0
        for i in range(len(nums)):
            count += nums[i]
            if count > res:
                res = count
            if count <= 0:
                count = 0
        return res

有一个误区:是遇到负数就从头开始还是和为负数就从头开始?

比如,4,-1,3这个序列,4 - 1 = 3是正数,对于后面的3起到增益的作用,所以应该被保留,但是由于最大值一直都存在res里面,所以即使3比4要小,对于结果并不会产生影响。

第31天完结!!🎉

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

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

相关文章

数据库中的几种锁

数据库锁 1.数据库锁的种类 以 mysql innoDB 为例&#xff0c;数据库的锁有 排他锁&#xff0c;共享锁&#xff0c;意向锁&#xff0c;自增锁&#xff0c;间隙锁&#xff0c;锁的范围有包括&#xff0c;行锁&#xff0c;表锁 &#xff0c;区间锁。 从应用研发的视角&#xff…

Gromacs WARNING问题

上述示例中&#xff0c;NA 是对系统净电荷进行中和的阳离子。请根据您的系统特性和仿真需求调整这些值。 总体而言&#xff0c;这个警告是为了提醒您关于电荷中性化的问题&#xff0c;确保您的模拟结果更加物理可信。 收敛性未达到预期精度&#xff1a; 警告指出&#xff0c;优…

普中STM32-PZ6806L开发板(HAL库函数实现-访问多个温度传感器DS18B20)

简介 我们知道多个DS18B20的DQ线是可以被挂在一起的, 也就是一根线上可以访问不同的DS18B20而不会造成数据错乱, 怎么做到的&#xff0c;其实数据手册都有说到&#xff0c; 就是靠64-bit ROM code 进行识别, 也可以理解成Serial Number进行识别, 因为主要差异还是在Serial Numb…

成为一名合格的软件测试工程师,得掌握什么技能?

在这个信息时代&#xff0c;软件行业的需求空前增长&#xff0c;而软件测试工程师作为软件开发过程中的重要角色&#xff0c;也越来越受企业的重视。那么&#xff0c;成为一名合格的软件测试工程师需要掌握什么技能呢&#xff1f;我结合多年的教学经验为大家总结出以下几点。 …

Fast and flexible X-ray tomography using the ASTRA toolbox

使用ASTRA工具箱进行快速灵活的X射线断层扫描 论文链接&#xff1a;http://dX.doi.org/10.1364/OE.24.025129 项目链接&#xff1a;https://astra-toolboX.com/indeX.html Abstract 从一系列投影图像中重建物体&#xff0c;如在计算机断层扫描(CT)中&#xff0c;是许多不同应…

nuxt3 env文件、全局变量处理

有两种方向 通过配置nuxt.config.ts Nuxt提供的钩子函数&#xff0c;实现全局变量的获取 runtimeconfig env文件往runtimeconfig放入内容 useAppConfig 通过env文件配置来获取服务端全局变量&#xff0c;客户端通过vite.define实现 nuxt.config.ts Nuxt钩子 1. runtim…

Unity ab包如何加密

「ab包」全称为 AssetBundle &#xff0c;是Unity提供的一种资源存储压缩包。其中储存了游戏的资源&#xff0c;如图片、模型、纹理、音视频、代码等文件。 由于ab包具有灵活储存、支持热更、包体较小且便于管理等优势&#xff0c;已经成为了市面上主流的游戏资源压缩方式。 …

李沐机器学习系列4---全连接层到卷积

1 从全连接到卷积 1.1 平移不变性 从概率分布的角度来看卷积的定义, f ( τ ) f(\tau) f(τ)是概率密度&#xff0c; g ( t − τ ) g(t-\tau) g(t−τ)是在这个分布下的均值 ( f ∗ g ) ( t ) ∫ − ∞ ∞ f ( τ ) g ( t − τ ) d τ (f*g)(t)\int_{-\infin}^{\infin}f(\t…

2024/01/02 每日AI必读资讯

减少LLM幻觉的方法 这篇论文总结了减少LLM幻觉的32种方法&#xff0c;包括RAG、微调模型&#xff0c;提示词工程等。 论文&#xff1a;https://arxiv.org/abs/2401.01313E5-mistral-7b-instruct&#xff1a;使用合成数据训练的Embedding模型 亮点是仅使用LLM生成的数据即可实现…

指令流水线的计算

我们需要知道以下公式&#xff1a; 设指令的条数为 n&#xff0c;指令执行需要 m 个阶段&#xff0c;时钟周期为 t 不采用流水线执行的时间&#xff1a;T1 n x m x t&#xff1b; 采用流水线执行的时间&#xff1a;T2 m x t (n - 1) x t&#xff1b; 加速比 S T1 / T2&…

PTA——逆序的三位数

程序每次读入一个正3位数&#xff0c;然后输出按位逆序的数字。注意&#xff1a;当输入的数字含有结尾的0时&#xff0c;输出不应带有前导的0。比如输入700&#xff0c;输出应该是7。 输入格式&#xff1a; 每个测试是一个3位的正整数。 输出格式&#xff1a; 输出按位逆序…

MacOS M1/M2 Go Debug 配置

前言 换电脑&#xff0c;Go 环境带来一些麻烦&#xff0c;耽误很多时间&#xff0c;稍作记录。 原始电脑是 Mac 旧款&#xff0c;CPU x86 构型&#xff0c;新电脑 M2&#xff0c;因为旧电脑里本地文件很多&#xff0c;为了简化搬迁&#xff0c;还是用了 Mac 自带的迁移&#x…

LeetCoed刷题:21. 合并两个有序链表

题目&#xff1a; 是否独立解出&#xff1a;否 解题时的思路与想法&#xff1a;解题时有几个问题&#xff1a; 1.怎么遍历两个数组&#xff0c;嵌套两个while循环不能实现&#xff08;后面通过看题解知道list1&#xff01;null&&list2&#xff01;null&#xff09; …

旋转图像(LeetCode 48)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路参考文献 1.问题描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在「原地」旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示…

知虾分析——深入了解Shopee平台的知虾分析工具

Shopee是一家知名的电商平台&#xff0c;为了帮助卖家提高业务表现&#xff0c;他们提供了一款强大的数据分析工具——知虾分析。这个工具可以帮助卖家监控店铺的运营状况&#xff0c;优化销售策略&#xff0c;并提高整体的业务表现。本文将深入解析知虾分析的关键功能和用途&a…

LINUX加固之命令审计

一、前言 在LINUX安全范畴中&#xff0c;安全溯源也是很重要的一个环节。对主机上所有曾操作过的命令详细信息需要有一份记录保存&#xff0c;当系统遭受破坏或者入侵&#xff0c;拿出这份记录&#xff0c;可以帮助定位一些可疑动作。 很多系统通常都会配置安全堡垒机&#xff…

亚马逊站内广告位置在哪设置?怎么设置广告位置?-站斧浏览器

亚马逊站内广告位置在哪设置&#xff1f; 亚马逊提供了多种广告类型&#xff0c;包括&#xff1a; Sponsored Products&#xff08;赞助产品&#xff09;&#xff1a;在搜索结果和商品详情页中展示。 Sponsored Brands&#xff08;赞助品牌&#xff09;&#xff1a;在搜索结…

git提交操作(不包含初始化仓库)

1.进入到本地的git仓库 查看状态 git status 如果你之前有没有成功的提交&#xff0c;直接看第5步。 2.追踪文件 git add . 不要提交大于100M的文件&#xff0c;如果有&#xff0c;看第5步 3.提交评论 git commit -m "你想添加的评论" 4.push (push之前可以再…

weblogic中间件安装

1.下载jdk Java Archive Downloads - Java SE 6 下载jdk-6u45-linux-x64.bin 2.配置防火墙和SELINUX Redhat7操作系统配置防火墙&#xff0c;开放应用端口&#xff0c;例如7001&#xff1b; # firewall-cmd --permanent --add-port7001/tcp # firewall-cmd --reload 关闭selinu…

jmeter使用心得(一)

jmeter作为接口测试的常用工具之一&#xff0c;在我们的测试中经常会用到&#xff0c;往期的文章中&#xff0c;我们也分享过jmeter的各种功能和用法&#xff0c;基本覆盖了方方面面&#xff0c;可以满足各种接口测试的需求。但实际测试中我们也会发现&#xff0c;jmeter这么强…