代码随想录算法训练营第23期day31|贪心算法理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和
目录
一、贪心算法理论基础
二、(leetcode 455)分发饼干
三、(leetcode 376)摆动序列
四、(leetcode 53)最大子序和
一、贪心算法理论基础
1.什么是贪心
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
2.贪心一般解题步骤
贪心算法一般分为如下四步:
- 将问题分解为若干个子问题
- 找出适合的贪心策略
- 求解每一个子问题的最优解
- 将局部最优解堆叠成全局最优解
这个四步其实过于理论化了,我们平时在做贪心类的题目,做题的时候,只要想清楚局部最优是什么,如果推导出全局最优,其实就够了。
二、(leetcode 455)分发饼干
力扣题目链接
状态:已AC
解题思路是从胃口小的先开始满足
class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {// 贪心的思想,想要满足最多的孩子,就要先从胃口小的孩子开始sort(g.begin(), g.end());sort(s.begin(), s.end());int index = 0;for(int i = 0; i < s.size(); ++i){if(index < g.size() && g[index] <= s[i]){index++;}}return index;}
};
三、(leetcode 376)摆动序列
力扣题目链接
状态:没有思路。
这道题如果是在没有做过的情况下遇到,首先想到的方法(常规解法)应该是动态规划:
设 dp 状态dp[i][0],表示考虑前 i 个数,第 i 个数作为山峰的摆动子序列的最长长度
设 dp 状态dp[i][1],表示考虑前 i 个数,第 i 个数作为山谷的摆动子序列的最长长度
动态规划的初始状态:dp[0][0] = dp[0][1] = 1,转移方程:
dp[i][0] = max(dp[i][0], dp[j][1] + 1),其中0 < j < i且nums[j] < nums[i],表示将 nums[i]接到前面某个山谷后面,作为山峰。
dp[i][1] = max(dp[i][1], dp[j][0] + 1),其中0 < j < i且nums[j] > nums[i],表示将 nums[i]接到前面某个山峰后面,作为山谷。
class Solution {
public:int dp[1005][2];int wiggleMaxLength(vector<int>& nums) {memset(dp, 0, sizeof dp);dp[0][0] = dp[0][1] = 1;for (int i = 1; i < nums.size(); ++i) {dp[i][0] = dp[i][1] = 1;for (int j = 0; j < i; ++j) {if (nums[j] > nums[i]) dp[i][1] = max(dp[i][1], dp[j][0] + 1);}for (int j = 0; j < i; ++j) {if (nums[j] < nums[i]) dp[i][0] = max(dp[i][0], dp[j][1] + 1);}}return max(dp[nums.size() - 1][0], dp[nums.size() - 1][1]);}
};
这道题还有优化的空间,就是使用贪心算法,使用贪心算法要考虑三种情况
- 情况一:上下坡中有平坡
- 情况二:数组首尾两端
- 情况三:单调坡中有平坡
class Solution {
public:int wiggleMaxLength(vector<int>& nums) {if(nums.size() <= 1) return nums.size();int curDiff = 0;int preDiff = 0;int res = 1;for(int i = 0; i < nums.size()-1; ++i){curDiff = nums[i+1] - nums[i];if((preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff <0)){res++;preDiff = curDiff;}}return res;}
};
四、(leetcode 53)最大子序和
力扣题目链接
状态:暴力解法超时。
局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。全局最优:选取最大“连续和”
局部最优的情况下,并记录最大的“连续和”,可以推出全局最优。
class Solution {
public:int maxSubArray(vector<int>& nums) {int res = INT_MIN;int count = 0;int len = nums.size();for(int i = 0; i < len; ++i){count += nums[i];if(count > res){res = count;}if(count <= 0) count = 0;}return res;}
};相关文章:
代码随想录算法训练营第23期day31|贪心算法理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和
目录 一、贪心算法理论基础 二、(leetcode 455)分发饼干 三、(leetcode 376)摆动序列 四、(leetcode 53)最大子序和 一、贪心算法理论基础 1.什么是贪心 贪心的本质是选择每一阶段的局部最优…...
mdadm命令详解及实验过程
mdadm命令详解及实验过程 ⼀.概念 mdadm是multiple devices admin的简称,它是Linux下的⼀款标准的软件 RAID 管理⼯具,作者是Neil Brown ⼆.特点 mdadm能够诊断、监控和收集详细的阵列信息 mdadm是⼀个单独集成化的程序⽽不是⼀些分散程序的集合&#…...
推荐几个程序员必逛的个人技术博客网站
1、美团技术团队 地 址: 美团技术团队简 介:美团技术团队的博客,干货满满。推荐指数:⭐⭐⭐⭐⭐ 2、阮一峰的网络日志 地 址: 阮一峰的个人网站 - Ruan YiFengs Personal Website简 介:大神阮一峰,博客风格真正…...
Python桌面应用之XX学院水卡报表查询系统(Tkinter+cx_Oracle)
一、功能样式 Python桌面应用之XX学院水卡报表查询系统功能: 连接Oracle数据库,查询XX学院水卡操作总明细报表,汇总数据报表,个人明细报表,进行预览并且支持导出报表 1.总明细报表样式 2.汇总明细样式 3.个人明细…...
ubuntu 中使用Qt连接MMSQl,报错libqsqlodbc.so: undefined symbol: SQLAllocHandle
Qt4.8.7的源码编译出来的libqsqlodbc.so,在使用时报错libqsqlodbc.so: undefined symbol: SQLAllocHandle,需要在编译libqsqlodbc.so 的项目pro文件加上LIBS -L/usr/local/lib -lodbc。 这里的路径根据自己的实际情况填写。 编辑: 使用uni…...
笔试,猴子吃香蕉,多线程写法
package demo;import java.util.concurrent.CountDownLatch;/*** description: 猴子吃香蕉* author: wxm* create: 2023-10-23 14:01**/ public class Main {public static void main(String[] args) throws InterruptedException {Monkey[] m new Monkey[3];Resource r new …...
安装docker ,更换docker版本
docker dockerd & containerd Dockerd(Docker 守护进程)在其底层使用 Containerd 来管理容器。Containerd 是一个开源的容器运行时管理器,由 Docker 公司于2017年开发并开源,它负责实际的容器生命周期管理。 以下是 Docker 守…...
英语小作文写作模板及步骤(1)
...
编写hello驱动程序
hello的驱动编写 编写驱动程序的步骤 1.确定主设备号,也可以让内核分配 2.定义自己的 file_operations 结构体 3.实现对应的 drv_open/drv_read/drv_write 等函数,填入 file_operations 结构 体 4.把 file_operations 结构体告诉内核:regist…...
ZYNQ中断例程
GPIO 中断系统初始化流程: 第一步:初始化 cpu 的异常处理功能 第二步:初始化中断控制器 第三步:向 CPU 注册异常处理回调函数; 第四步:将中断控制器中的对应中断 ID 的中断与中断控制器相连接 第五步:设置 …...
常用linux命令 linux_cmd_sheet
查看文件大小 ls -al 显示每个文件的kb大小 查看系统日志 dmesg -T | tail 在 top 命令中,RES 和 VIRT(或者 total-vm)是用来表示进程内存使用的两个不同指标,它们之间有以下区别: RES(Resident Set Size…...
【proteus】8086 写一个汇编程序并调试
参考书籍:微机原理与接口技术——基于8086和Proteus仿真(第3版)p103-105,p119-122. 参考程序是p70,例4-1 在上一篇的基础上: 创建项目和汇编文件 写一个汇编程序并编译 双击8086的元件图: …...
大数据之LibrA数据库常见术语(四)
Failover 指当某个节点出现故障时,自动切换到备节点上的过程。反之,从备节点上切换回来的过程称为Failback。 Freeze 在事务ID耗尽时由AutoVacuum Worker进程自动执行的操作。FusionInsight LibrA会把事务ID记在行头,在一个事务取得一行时&…...
Docker基础知识
文章目录 Docker Docker 一次构建,处处运行,类似于JVM 虚拟机是软件硬件(需要Hypervisors实现硬件资源虚拟化): 资源占用大启动慢(虚拟机是分钟级,Docker是秒级)冗余步骤多 sha2…...
swoole 是什么?
Swoole是一个为PHP用C和C编写的基于事件的高性能异步& 协程并行网络通信引擎; 使 PHP 开发人员可以编写高性能的协程 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IO…...
我想要一个勋章
目录 一、背景二、过程三、总结 一、背景 十年前结缘,也许是冥冥中自有天注定,注定要给自己多加一个今天的节日。 二、过程 一个勋章,一个有意义的标志。 一个勋章,一个时间轮上的帧。 一个勋章,一个二进制的节点。…...
微信小程序设计之主体文件app-json-pages
一、新建一个项目 首先,下载微信小程序开发工具,具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后,注册小程序账号,具体注册方法,可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…...
C语言-面试题实现有序序列合并
要求: a.输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。 数据范围: 1≤n,m≤1000 1≤n,m≤1000 , 序列中的值满足 0≤val≤30000 输入描述: 1.输入包含三行, 2.第一行包含两个正整数n, m&am…...
Android12 启动页适配
印象中,在2022年末接到了一个针对Android12启动页适配的需求,当时也使用了一些适配方案,也写了一个Demo,但是最终没有付诸适配行动;当然并不是适配失败,而是根据官方适配方案适配后太丑了… 1024纪念文章&a…...
【微服务保护】初识 Sentinel —— 探索微服务雪崩问题的解决方案,Sentinel 的安装部署以及将 Sentinel 集成到微服务项目
文章目录 前言一、雪崩问题及其解决方案1.1 什么是雪崩问题1.2 雪崩问题的原因1.3 解决雪崩问题的方法1.4 总结 二、初识 Sentinel 框架2.1 什么是 Sentinel2.2 Sentinel 和 Hystrix 的对比 三、Sentinel 的安装部署四、集成 Sentinel 到微服务 前言 微服务架构在现代软件开发…...
保姆级教程:在Ubuntu 20.04上从零搭建宇树Go1机器狗的ROS仿真环境(含Gazebo避坑)
从零构建宇树Go1机器狗的ROS仿真环境:Ubuntu 20.04全流程指南 当四足机器人从实验室走向消费市场,宇树科技的Go1凭借其灵活动作和开源生态迅速成为开发者新宠。但第一次打开Gazebo看到机器狗瘫倒在地时,多数新手都会陷入手足无措的境地——依…...
Asian Beauty Z-Image Turbo 硬件需求详解:从消费级到专业级GPU配置
Asian Beauty Z-Image Turbo 硬件需求详解:从消费级到专业级GPU配置 1. 引言 最近有不少朋友在尝试跑一些新的图像生成模型时,遇到了一个挺实际的问题:我的显卡到底行不行?特别是像 Asian Beauty Z-Image Turbo 这类对画质和速度…...
猫抓浏览器资源嗅探扩展:专业配置与高效下载指南
猫抓浏览器资源嗅探扩展:专业配置与高效下载指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch࿰…...
373. Java IO API - 文件存储属性
文章目录373. Java IO API - 文件存储属性📏 示例:检查文件存储的空间使用情况⚙️ 解释🔍 确定 MIME 类型📂 示例:获取文件 MIME 类型⚠️ 重要注意事项🛠️ 示例:自定义文件类型探测器&#x…...
掌握AI专著写作密码,优质工具介绍助你快速完成学术专著
学术专著创作难题与AI工具助力 写学术专著的挑战,除了“能够写出来”以外,还有“能够出版并获得认可”的难题。在出版行业中,学术专著的目标群体相对狭窄,出版社对选题的学术价值和作者的影响力有严格的要求,因此很多…...
HY-MT1.5-1.8B翻译模型应用场景:跨境电商、多语言客服、文档翻译
HY-MT1.5-1.8B翻译模型应用场景:跨境电商、多语言客服、文档翻译 1. 轻量级翻译模型的核心价值 在全球化商业环境中,语言障碍仍然是企业拓展国际市场的主要挑战之一。HY-MT1.5-1.8B作为一款专为实际业务场景优化的轻量级翻译模型,其"小…...
PoeCharm完全攻略:角色构建效率提升与优化指南——解决流放之路玩家的数值困境
PoeCharm完全攻略:角色构建效率提升与优化指南——解决流放之路玩家的数值困境 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 引言:流放之路玩家的三大核心痛点 流放之路作…...
JLink V9固件烧写实战:从拆解到短接的完整操作手册(含DFU模式驱动安装)
JLink V9固件烧写实战:从拆解到短接的完整操作手册(含DFU模式驱动安装) 当你的JLink V9调试器突然"罢工",指示灯不再亮起,很可能是固件损坏导致的。这种情况在频繁使用或不当操作后并不罕见。本文将带你一步…...
零基础也能快速上手AI建站工具:手把手教你10分钟生成网站
很多人想建站但一直被技术门槛劝退,觉得需要代码、会设计、能写文案。其实现在用AI建站工具,这些都可以交给机器。这套通用教程不针对某个具体工具,而是拆解任何零基础建站工具都适用的核心操作步骤。跟着做,你也能在10分钟左右从…...
3大核心价值+5种应用场景:番茄小说下载器开源工具全解析
3大核心价值5种应用场景:番茄小说下载器开源工具全解析 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 番茄小说下载器是一款基于Rust语言开发的开源工具ÿ…...
