2023-12-29 贪心算法 分发饼干和摆动序列以及最大子数组和

贪心算法

什么是贪心算法?

就是每一阶段的最优解,从局部的最优解达到全局的最优解!
最好用的策略就是举反例,如果想不到反例,那么就试一试贪心吧

贪心算法一般分为如下四步:

  • 将问题分解为若干个子问题
  • 找出适合的贪心策略
  • 求解每一个子问题的最优解
  • 将局部最优解堆叠成全局最优解

455. 分发饼干

思路:这类涉及列表的数据!可以先考虑对列表进行排序先!然后优先满足最小胃口的或者排序优先满足最大胃口的都可以!

局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩

img

class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:s.sort()g.sort()count = 0sum = 0for _g in g:while sum < len(s):if _g <= s[sum]:count += 1s[sum] = -1breaksum += 1return countclass 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  # 返回满足的孩子数目

376. 摆动序列

思路:理解题目,一上一下就是产生峰值就是摆动了!这就是贪心所贪的地方,让峰值尽可能的保持峰值,然后删除单一坡度上的节点

376.摆动序列

class Solution:def wiggleMaxLength(self, nums: List[int]) -> int: if len(nums) <= 1:return len(nums)pre_diff = 0	#前一对元素的差值	cur_diff = 0	#当前一对元素的差值count = 1	# 记录峰值for i in range(len(nums) - 1):cur_diff = nums[i + 1] -nums[i]if (pre_diff >= 0 and cur_diff < 0) or (pre_diff <= 0 and cur_diff > 0):count += 1pre_diff = cur_diffreturn count 

53. 最大子数组和

思路:关键点是,每次的比较叠加的和不能小于0,否则不如当前的数大了!还有使用额外列表来做的思想也很精妙!关键点也是大于0这一点!

53.最大子序和

class Solution:def maxSubArray(self, nums: List[int]) -> int:# 使用额外列表来解决dp = [0] * len(nums)dp[0] = nums[0]for i in range(1, len(nums)):if dp[i - 1] > 0:  dp[i] = dp[i - 1] + nums[i]else:dp[i] = nums[i]return max(dp)def maxSubArray1(self, nums: List[int]) -> int:# 使用滑动窗口来解决 关键点就是每次比较的和知否大于当前的数值cur = nums[0]temp = 0for _num in nums:temp += _num# 如果临时值大于当前窗口的最大值 重新赋值if temp > cur:cur = temp# 如果不小于0的哇,怎么累加都不会小于刚加的那个值了!if temp < 0:temp = 0return cur

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

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

相关文章

【Python】win10 版Anaconda下载安装与认识 (2024版)

下载 Anaconda下载地址 还是蛮大的1GB: 安装 安装的话一般都是傻瓜式安装&#xff0c;选定好自己的安装目录就是下一步下一步就OK了&#xff0c;这里保存了一些安装过程中的记录&#xff1a; 安装成功&#xff1a; 安装过程时间还是有点长的&#xff0c;不知道是我电脑弱…

归并排序例题——逆序对的数量

做道简单一点的题巩固一下 归并排序实现步骤 将整个区间 [l, r] 划分为 [l, mid] 和 [mid1, r]。 递归排序 [l, mid] 和 [mid1, r]。 将左右两个有序序列合并为一个有序序列。 题目描述 给定一个长度为 n 的整数数列&#xff0c;请计算数列中的逆序对的数量。 逆序对的定义…

golang 生成一年的周数

// GetWeekTimeCycleForGBT74082005 获取星期周期 中华人民共和国国家标准 GB/T 7408-2005 // 参数 year 年份 GB/T 7408-2005 func GetWeekTimeCycleForGBT74082005(year int) (*[]TimeCycle, error) {var yearstart time.Time //当年最开始一天var yearend time.Time //当年…

系列三、Spring Security中自定义用户名/密码

一、Spring Security中自定义用户名/密码 1.1、自定义用户名/密码 1.1.1、配置文件中配置 spring.security.user.nameroot spring.security.user.password123456 1.1.2、定义基于内存的用户 /*** Author : 一叶浮萍归大海* Date: 2024/1/11 21:50* Description:*/ Configu…

Java 日期接收报错:could not be parsed, unparsed text found at index 10(已解决)

文章目录 问题背景代码解决方法问题背景 使用 Element-UI 的 el-date-picker 组件 将日期转给Java,Java报错 java.time.format.DateTimeParseException: Text ‘2024-01-03T16:00:00.000Z’ could not be parsed, unparsed text found at index 10 代码 Vue<el-date-picke…

关于SpringMVC前后端传值总结

一、传递方式 1、查询参数&路径参数 查询参数&#xff1a; URI:/teachers?typeweb GetMapping("/klasses/teachers") public List<Teacher> getKlassRelatedTeachers(String type ) { ... }如果查询参数type与方法的名称相同&#xff0c;则直接将web传入…

EM planner 论文阅读

论文题目&#xff1a;Baidu Apollo EM Motion Planner 0 前言 EM和Lattice算法对比 EM plannerLattice Planner参数较多&#xff08;DP/QP&#xff0c;Path/Speed&#xff09;参数少且统一化流程复杂流程简单单周期解空间受限简单场景解空间较大能适应复杂场景适合简单场景 …

文件操作(与文件相关)相关笔记

1.FileInputStream 1.构造方法 new FileInputStream(String); 意思是创建一个对象&#xff0c;让这个对象指向某个文件&#xff0c;然后对这个文件进行读取操作&#xff0c;如果这个文件不存在 2.读取文件 读取文件使用read()方法&#xff1b; 如果每次读取一个字节&#xff0c…

使用Pygame显示文字的示例代码

import pygame import syspygame.init()# 设置窗口尺寸 win_size (800, 600) screen pygame.display.set_mode(win_size) pygame.display.set_caption("文字显示示例")# 设置字体和文字内容 font pygame.font.SysFont(None, 48) # 使用系统默认字体&#xff0c;字…

Windows VSCode 使用Python

一、vscode中安装python 二、下载python.exe&#xff08;即vscode中需要的python解释器&#xff09; 下载地址&#xff1a;https://www.python.org/downloads/ 三、安装第三方代码规范工具 参考网址&#xff1a;https://www.python.org/downloads/ 工具介绍 flake8 &#xf…

快速打通 Vue 3(四):标签的 ref 属性与 Vue3 生命周期

很激动进入了 Vue 3 的学习&#xff0c;作为一个已经上线了三年多的框架&#xff0c;很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue&#xff08;一&#xff09;&#xff1a;Vue 入…

Mondo备份linux操作系统为iso镜像 —— 筑梦之路

简介 Mondo Rescue&#xff08;以下简称Mondo&#xff09;可以说是Linux 下的Ghost&#xff0c;它可以将你的系统像照相一样备份至磁带&#xff0c;CD-R&#xff0c;CD-RW&#xff0c;NFS或硬盘分区。Mondo广泛支援LVM&#xff0c;RAID&#xff0c;ext2, ext3, JFS, XFS,Reise…

Fragstats景观格局指数计算入门教程

土地利用以及景观格局是当前全球环境变化研究的重要组成部分及核心内容&#xff0c;其对区域的可持续发展以及区域土地管理有非常重要的意义。通过对土地利用时空变化规律进行分析可以更好的了解土地利用变化的过程和机制&#xff0c;并且通过调整人类社会经济活动&#xff0c;…

蓝桥杯练习题(二)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;二&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

【ASP.NET Core 基础知识】--MVC框架--Models和数据绑定

Models和数据绑定在ASP.NET Core MVC中扮演着关键的角色&#xff0c;对于构建强大、灵活和可维护的Web应用程序至关重要。这一节我们就来讲一下。 一、Models 1.1 Models的定义和作用 在ASP.NET Core MVC中&#xff0c;Model是应用程序中用于表示数据结构和业务逻辑的一种抽…

VS Code 配置 Vue3 模板 详细步骤

1、打开 VS Code &#xff0c;在页面左下角找到这个设置图标&#xff0c;然后找到 “用户代码片段” 2、接着点击 “新建全局代码片段文件” 3、在输入框中输入你要设置的模板名&#xff0c;然后回车确认 4、接下来配置自己想要模板代码&#xff0c;或者也可以借鉴我写的这个&…

【C语言刷题每日一题#牛客网HJ73】——计算日期到天数转换(给定日期,计算是该年的第几天)

目录 问题描述 思路分析 数据结构构建部分 计算部分 代码实现 结果测试 此问题解决方法不唯一&#xff0c;这里介绍的是一种使用数组和循环实现的简单办法 问题描述 思路分析 问题的要求是输入一个日期&#xff0c;计算这是当年的第几天——要解决这个问题&#xff0c;逻…

MongoDB之Change Stream实战

什么是 Chang Streams Change Stream 指数据的变化事件流&#xff0c;MongoDB 从 3.6 版本开始提供订阅数据变更的功能。Change Stream 是 MongoDB 用于实现变更追踪的解决方案&#xff0c;类似于关系数据库的触发器&#xff0c;但原理不完全相同&#xff1a; Change Stream触…

Linux动态分配IP与正向解析DNS

目录 一、DHCP分配 1. 动态分配 1.1 服务端服务安装 1.2 修改服务端dhcp配置 1.3 修改客户端dhcp&#xff0c;重启查询网卡信息 2. 根据mac固定分配 2.1 修改服务器端dhcp服务配置 2.2 客户端自动获取&#xff0c;查看网卡信息 二、时间同步 1. 手动同步 2. 自动同…

java实现AES256对称加解密工具类

一、引入依赖包 引入相关依赖包 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version> </dependency> <!--lombok用于简化实体类开发--> <dependency&g…