Day31代码随想录贪心part01:455.分发饼干、376. 摆动序列(也可以动态规划)、53. 最大子序和(也可以动态规划)

news/2024/11/14 21:51:27/

Day31 贪心part01

455.分发饼干

题意:对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

  • 输入: g = [1,2], s = [1,2,3]
  • 输出: 2
  • 解释:你有两个孩子和三块小饼干,2 个孩子的胃口值分别是 1,2。你拥有的饼干数量和尺寸都足以让所有孩子满足。所以你应该输出 2.

核心思想:饼干大的分给胃口大且能满足他的小孩

当然其实用小饼干满足尽量小的小孩其实也是可以的

首先将胃口和饼干两个数组都从小到大排序,从大往小遍历

class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:g.sort()s.sort()num = 0index = len(s)-1 #饼干的倒叙for i in range(len(g)-1,-1, -1):# 注意边界条件,从len(g)-1开始,走到0但因为是开区间所以是-1,每次-1步if index>=0 and g[i]<=s[index]:num +=1index -=1return num

**值得注意的事情:**这里是从小孩的胃口g开始倒叙遍历的,而不是从饼干的大小开始的,这是很重要的!!!因为如果从饼干大的开始,发现饼干满足不了胃口最大的小孩,所以饼干减减,一直满足不了,那么结果就是不对的;

所以 一定要 for 控制 胃口,里面的 if 控制饼干。

376. 摆动序列(也可以动态规划

题意:例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。

思路:

局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值

整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列

遇到摆动就++(通过prediff=num[i]-num[i-1]和curdiff=num[i+1]-num[i]是否茼蒿判断),如果是坡上的元素就不加了

一些特殊情况的判断:

  • 上下坡有平坡比如[1,2,2,2,1]这种情况→[1,2,1]:prediff=0,curdiff<0或>0这种情况情况
  • 首尾元素:[1,2]变成→[1,1,2]就可以使用上面的规则了得到2,这样如果是[2,2]→[2,2,2]最后也是1
  • 平坡情况:可能是图上的上下坡度,但也可能是上-平-上的单调坡。prediff没必要实时跟着curdiff变化,只有有变化之后再跟随就可以
class Solution:def wiggleMaxLength(self, nums: List[int]) -> int:if len(nums)==1:return 1prediff = 0curdiff = 0res = 1# if len(nums)==2: # 复杂了,下面的是兼容的#     curdiff = nums[1]-nums[0]for i in range(len(nums)-1):curdiff = nums[i+1] - nums[i]if (prediff>=0 and curdiff<0) or (prediff<=0 and curdiff>0):res+=1prediff = curdiff # 解决单调平坡问题return res

53. 最大子序和(也可以动态规划

题意:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

  • 输入: [-2,1,-3,4,-1,2,1,-5,4]
  • 输出: 6
  • 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

思路:如果前面的结果和是负数,那与后面的数相加只会让后面变得更小,比如-2+1=-1反而让1变小了,那么还不如重新开始呢

是连续和是负数的时候抛弃,不是只要遇到负数就抛弃

class Solution:def maxSubArray(self, nums: List[int]) -> int:max_sum = float('-inf')now_sum = 0for i in range(len(nums)):if now_sum<0:now_sum = nums[i]else:now_sum += nums[i]if now_sum>max_sum:max_sum = now_sumreturn max_sum


http://www.ppmy.cn/news/1426582.html

相关文章

python使用redis存储时序数据

import redisdef ts_demo():"""时序数据存储RedisTimeSeries测试"""# 连接到Redisr redis.Redis(hostlocalhost, password"xxxx", port63790, db0)r1 r.ts()# print(r1.get("ts_key"))# print(r.exists(ts_key))# # 清空键…

DFS的例子

x星球的盛大节日为增加气氛&#xff0c;用30台机光器一字排开&#xff0c;向太空中打出光柱。安装调试的时候才发现&#xff0c;不知什么原因&#xff0c;相邻的两台激光器不能同时打开&#xff01;国王很想知道&#xff0c;在目前这种bug存在的情况下&#xff0c;一共能打出多…

乡政府管理系统|基于Springboot的乡政府管理系统设计与实现(源码+数据库+文档)

乡政府管理系统目录 目录 基于Springboot的乡政府管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、活动信息管理 3、新闻类型管理 4、新闻动态管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推…

R语言入门:vegan包diversity()、simpson.unb()、fisher.alpha()、specnumber函数

1、简介 Shannon, Simpson, and Fisher diversity indices and species richness. 2、使用语法 diversity(x, index "shannon", groups, equalize.groups FALSE,MARGIN 1, base exp(1)) simpson.unb(x, inverse FALSE) fisher.alpha(x, MARGIN 1, ...) spec…

LLaMA3-70B: Meta AI 的最新自然语言处理模型

LLaMA-70B&#xff1a; Meta AI 的最新自然语言处理模型 近期&#xff0c;Meta AI 发布了其最新的自然语言处理模型 LLaMA-70B&#xff0c;这是一个基于 transformer 结构的语言模型&#xff0c;具有70亿个参数。LLaMA-70B 的发布标志着 Meta AI 在自然语言处理领域的又一重大突…

PHP:IntelliJ IDEA 配置 PHP 开发环境及导入PHP项目

在创建PHP项目之前我们需要安装PHP插件&#xff0c;安装步骤如下&#xff1a;Windows&#xff1a;IntelliJ IDEA Ultimate 安装 PHP 插件-CSDN博客 1、导入已有PHP项目&#xff0c;导入之后选择&#xff0c;File > Setting 选择对应 CLL Interpreter&#xff0c;如果没有操…

统计selenium模拟登录的一些方法

驱动安装 之前常常是先根据浏览器版本下载对应版本的驱动&#xff0c;但其实有一个办法是可以自动获取当前浏览器的版本&#xff0c;自动下载对应的驱动到本地的。 from webdriver_manager.chrome import ChromeDriverManagerbrowser webdriver.Chrome(ChromeDriverManager()…

卷积神经网络(LeNet5实现对Fashion_MNIST分类

参考6.6. 卷积神经网络&#xff08;LeNet&#xff09; — 动手学深度学习 2.0.0 documentation (d2l.ai) ps&#xff1a;在这里预备使用pythorch 1.对 LeNet 的初步认识 总的来看&#xff0c;LeNet主要分为两个部分&#xff1a; 卷积编码器&#xff1a;由两个卷积层组成; …