代码随想录算法训练营Day31 | 贪心算法理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和 | Python | 个人记录向

本文目录

  • 贪心算法理论基础
  • 455.分发饼干
    • 做题
    • 看文章
      • 大饼干优先
      • 小饼干优先
  • 376. 摆动序列
    • 做题
    • 看文章
  • 53. 最大子序和
    • 做题
    • 看文章
      • 暴力求解
      • 贪婪算法
  • 以往忽略的知识点小结
  • 个人体会

贪心算法理论基础

代码随想录:贪心算法理论基础

455.分发饼干

代码随想录:455.分发饼干
Leetcode:455.分发饼干

做题

将饼干和小孩都按降序排序,再依次满足。

class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:g.sort(reverse=True)s.sort(reverse=True)res = 0i = j = 0if len(s) == 0 or len(g) == 0:return 0while i < len(s):if s[i] >= g[j]:res += 1i += 1j += 1if j >= len(g):breakreturn res

看文章

大饼干优先

class Solution:def findContentChildren(self, g, s):g.sort()  # 将孩子的贪心因子排序s.sort()  # 将饼干的尺寸排序index = len(s) - 1  # 饼干数组的下标,从最后一个饼干开始result = 0  # 满足孩子的数量for i in range(len(g)-1, -1, -1):  # 遍历胃口,从最后一个孩子开始if index >= 0 and s[index] >= g[i]:  # 遍历饼干result += 1index -= 1return result

时间复杂度:O(nlogn)
空间复杂度:O(1)

小饼干优先

class Solution:def findContentChildren(self, g, s):g.sort()  # 将孩子的贪心因子排序s.sort()  # 将饼干的尺寸排序index = 0for i in range(len(s)):  # 遍历饼干if index < len(g) and g[index] <= s[i]:  # 如果当前孩子的贪心因子小于等于当前饼干尺寸index += 1  # 满足一个孩子,指向下一个孩子return index  # 返回满足的孩子数目

时间复杂度:O(nlogn)
空间复杂度:O(1)

376. 摆动序列

代码随想录:376. 摆动序列
Leetcode:376. 摆动序列

做题

有初始思路,比较简单,需要调试解决特殊情况。用一个bool变量来记录前面是上升还是下降,当bool变化时就res += 1,当前面平峰时需要特殊处理。具体代码如下:

class Solution:def wiggleMaxLength(self, nums: List[int]) -> int:size = len(nums)if size == 1: return 1if size == 2:if nums[0] != nums[1]:return 2else:return 1res = 1level = Truefor i in range(1, size):cur = nums[i] - nums[i-1]if i == 1:if cur > 0:is_lift = Truelevel = Falseres += 1elif cur < 0:is_lift = Falselevel = Falseres += 1else:if level and cur > 0:level = Falseis_lift = Trueres += 1elif level and cur < 0:level = Falseis_lift = Falseres += 1elif level:continueelif is_lift and cur < 0:res += 1is_lift = Falseelif not is_lift and cur > 0:res += 1is_lift = Truereturn res

时间复杂度:O(n)
空间复杂度:O(1)

看文章

计算prediff和curdiff,考虑三种情况:上下坡中有平坡、数组首尾两端、单调坡中有平坡。具体思路看文章。也可以用动态规划。这里感觉太繁琐了,暂时不看。

53. 最大子序和

代码随想录:53. 最大子序和
Leetcode:53. 最大子序和

做题

无贪心算法思路。

看文章

暴力求解

C++可能能过,其他语言不一定
时间复杂度:O(n^2)
空间复杂度:O(1)

贪婪算法

局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。
全局最优:选取最大“连续和”。
局部最优的情况下,并记录最大的“连续和”,可以推出全局最优。
从代码角度上来讲:遍历 nums,从头开始用 count 累积,如果 count 一旦加上 nums[i]变为负数,那么就应该从 nums[i+1]开始从 0 累积 count 了,因为已经变为负数的 count,只会拖累总和。
时间复杂度:O(n)
空间复杂度:O(1)
按照思路自己实现了代码:

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

以往忽略的知识点小结

  • 贪心算法没什么“思路”,可能就是用简单的思路尝试,然后不断调试,处理特殊情况

个人体会

完成时间:1h40min。
心得:贪心算法比较没“思路”,但特殊情况分析还挺麻烦的,最好自己尝试,看文章有点难进入思路。

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

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

相关文章

你身边的测试都转行了么?

入行13年&#xff0c;时间过得真快&#xff0c;由一开始的测试执行人员到测试组长&#xff0c;经历了4家公司&#xff0c;认识很多测试同事&#xff0c;有的人中场退出&#xff0c;有的人转行&#xff0c;有的人艰难地前行。。。 一&#xff1a;结婚嫁人生子&#xff0c;退出职…

linux部署java服务流程案例

linux部署java服务流程案例 一 检查java环境启动jar包命令 一 检查java环境 java启动jar包命令 java -jar zdbs_hd_33333.jar

AI图书推荐:AI在语言学习教育领域的应用和挑战

这本书《AI在语言学习教育领域的应用和挑战》&#xff08;AI in Language Teaching, Learning, and Assessment&#xff09;由Fang Pan编辑&#xff0c;出版于IGI Global&#xff0c;主要探讨了人工智能&#xff08;AI&#xff09;在语言教育领域的应用、挑战以及潜在的益处。 …

力扣数据库题库学习(5.6日)--1683. 无效的推文

1683. 无效的推文 问题链接 思路分析 查询所有无效推文的编号&#xff08;ID&#xff09;。当推文内容中的字符数严格大于 15 时&#xff0c;该推文是无效的。 以任意顺序返回结果表。 MySQL 中有一些用于处理字符串的函数&#xff0c;其中包括用于获取字符串长度的函数。可…

偏微分方程算法之椭圆型方程差分格式编程示例

目录 一、示例1-五点菱形格式 1.1 C代码 1.2 计算结果 二、示例2-九点紧差分格式 2.1 C代码 2.2 计算结果 三、示例3-二阶混合边值 3.1 C代码 3.2 计算结果 本专栏对椭圆型偏微分方程的三种主要差分方法进行了介绍&#xff0c;并给出相应格式的理论推导过程。为加深对…

243 基于matlab的模糊C均值算法(FCM)及其改进算法将空间邻域项引入FCM的目标函数(FCM_S)

基于matlab的模糊C均值算法&#xff08;FCM&#xff09;及其改进算法将空间邻域项引入FCM的目标函数(FCM_S),广义的模糊C均值(GFCM)算法&#xff0c;基于核的改进的模糊c均值聚类算法&#xff08;KFCM&#xff09;,基于核的广义模糊c均值聚类算法KGFCM的图像分割方法。程序已调…

框架漏洞RCE-1

一、前提 1、命令执行漏洞&#xff1a;直接调用操作系统命令。攻击者构造恶意命令&#xff0c;将命令拼接到正常的输入中&#xff0c;达到恶意攻击的目的。 (1)、常见命令执行函数 PHP&#xff1a;exec、shell_exec、system、passthru、popen、proc_open、反引号等 ASP.N…

Go语言在Web开发中有哪些常用框架?

文章目录 1. Gin原因和解决方案示例代码 2. Echo原因和解决方案示例代码 3. Revel原因和解决方案示例代码 4. Buffalo原因和解决方案示例代码 总结 Go语言在Web开发中拥有许多优秀的框架&#xff0c;这些框架帮助开发者快速构建稳定且高效的Web应用。下面是一些常用的Go语言Web…

2024牛客五一集训派对day4 G.Game of Swapping Numbers

题目 思路&#xff1a; 补充证明&#xff1a; 1、当n > 2时&#xff0c;至少有两个区间是ai > bi&#xff08;设为正&#xff09; 或 ai < bi&#xff08;设为逆&#xff09;&#xff1b; 2、当 最优操作执行完后&#xff0c;任意两个区间都有交集&#xff1b; 3、…

拉普拉斯丨独家冠名2024年度ATPV技术分论坛,助力产业科技持续创新

为了进一步促进行业技术交流&#xff0c;推进光伏行业发展及标准建设的进程&#xff0c;针对高效电池&#xff0c;领跑组件&#xff0c;新产品认证及应用等技术专题及国内外光伏标准的最新进程&#xff0c;由中国绿色供应链联盟光伏专委会&#xff08;ECOPV&#xff09;指导的2…

对比试验系列:Faster—RCNN配置及训练自己数据集

一、源码下载 GitHub - bubbliiiing/faster-rcnn-pytorch: 这是一个faster-rcnn的pytorch实现的库&#xff0c;可以利用voc数据集格式的数据进行训练。这是一个faster-rcnn的pytorch实现的库&#xff0c;可以利用voc数据集格式的数据进行训练。. Contribute to bubbliiiing/fa…

JavaScript百炼成仙自学笔记——12

函数七重关之五&#xff08;自执行函数&#xff09; 什么时候用它&#xff1f; 很多时候&#xff0c;我们只想执行一个函数&#xff0c;却无所谓这个函数叫什么名字。那么这种情况下就可以考虑使用自执行函数。 {function(){console.log(123);} }(); 这就是一个简单的自执行的…

Day02-zabbix自定义监控详解

Day02-zabbix自定义监控详解 十、弥补监控死角-自定义监控10.1 概述10.2 自定义监控全流程1&#xff09;客户端a&#xff09;通过命令、脚本取出对应的值b&#xff09;创建键值与重启 2&#xff09;服务端a&#xff09;服务端手动测试b&#xff09; web页面&#xff1a;创建监控…

本地部署eXtplorer文件管理器并安装内网穿透构建私人云存储服务器

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件&#xff0c;是互联网最重要的应用之一&#xff0c;无论是…

数据结构---第十一天(判断题)

二、判断题 1.设计中,通常使用E-R图建立数据库的概念模型。 A. 对 B. 错 2.HAVING子句只能用在GROUP BY子句之后。 A. 对 B. 错 3. SELECT 语句中,LIKE用于描述模糊的数据项,可构造模糊查询。 A. 对 B. 错 4. 主键可以取重复值。 A. 对 B. 错 5. E-R图向关系模型转换时…

vue3父组件传值给子组件

// 父组件 在父组件中&#xff0c;使用 v-bind 的缩写 : 来动态地绑定 currentSelected 到子组件的 prop。这样&#xff0c;当 currentSelected 的值改变时&#xff0c;子组件的 prop 也会自动更新。 <template><div class"filter"><selectDate :cur…

websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步

文章目录 数据准备(阻塞和非阻塞)、数据读写(同步和异步)小总结&#xff08;陈硕老师的总结&#xff09; 知识拓展同步执行实例异步编程实例 八股 数据准备(阻塞和非阻塞)、数据读写(同步和异步) 无论是什么样的IO都包含两个阶段&#xff1a;数据准备和数据读写。 我们的网络IO…

1.6 Java全栈开发前端+后端(全栈工程师进阶之路)-前置课程Jdbc编程,使用Java通过Jdbc对数据库进行基础操作

原理图 用java代码实现连接数据库&#xff08;mysql&#xff09;的操作 因为数据库连接需要使用到API和URL&#xff0c;下面简单介绍下API和URL的概念&#xff0c; API&#xff1a; Application Programming Interface应用程序编程接口&#xff0c;就是一套类库 Java中的AP…

KaiwuDB 解析器之语义解析

KaiwuDB 解析器介绍 解析器是数据库系统的重要组成部分之一&#xff0c;主要的功能是将客户端输入的 SQL 语句分解为语法单元&#xff0c;然后将这些语法单元转化成数据库内部可识别的数据结构&#xff0c;最终生成数据库可以执行的计划。 KaiwuDB 的一条 SQL 执行的整个生命…

SQL 基础 | AVG 函数的用法

在SQL中&#xff0c;AVG()是一个聚合函数&#xff0c;用来计算某个列中所有值的平均值。 它通常与GROUP BY子句一起使用&#xff0c;以便对分组后的数据进行平均值计算。 AVG()函数在需要了解数据集中某个数值列的中心趋势时非常有用。 以下是AVG()函数的一些常见用法&#xff…