代码随想录算法训练营第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;}
};

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

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

相关文章

前沿重器[36] | ACL23-基于检索的大语言模型-报告阅读

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

Educational Codeforces Round 134 (Rated for Div. 2) D. Maximum AND

给你两个数组a和b&#xff0c;随意安排b的顺序&#xff0c;问最后 c [ i ] a [ i ] & b [ i ] c[i]a[i]\&b[i] c[i]a[i]&b[i]所有的c的与值的最大值是多少c的每一位如果想为1&#xff0c;那么必须a中这一位1的个数等于b中这一位0的个数&#xff0c;或者a中这一位0…

Nginx 防盗链

nginx防盗链问题 盗链&#xff1a; 就是a网站有一张照片&#xff0c;b网站引用了a网站的照片 。 防盗链&#xff1a; a网站通过设置禁止b网站引用a网站的照片。 nginx防止网站资源被盗用模块 ngx_http_referer_module 如何区分哪些是不正常的用户&#xff1f; HTTP Referer…

【Java 进阶篇】Java Tomcat 入门指南

Java Tomcat&#xff08;通常简称 Tomcat&#xff09;是一个流行的开源Servlet容器&#xff0c;用于托管Java Web应用程序。它是Apache软件基金会的一部分&#xff0c;提供了一个稳定、可靠的环境来运行Java Servlets和JavaServer Pages&#xff08;JSP&#xff09;。本篇博客将…

云安全—docker容器镜像检测

0x00 前言 docker镜像是属于整个云原生的重要基石之一&#xff0c;如果从镜像开始就没有安全性的话&#xff0c;那么整个云原生也就没有任何的安全性可言。所以镜像检测技术就成为了一个比较重要的点&#xff0c;本篇将通过研究docker镜像工具来整体分析风险以及应对方案。 市…

FPGA时序分析与约束(6)——综合的基础知识

在使用时序约束的设计过程中&#xff0c;综合&#xff08;synthesis&#xff09;是第一步。 一、综合的解释 在电子设计中&#xff0c;综合是指完成特定功能的门级网表的实现。除了特定功能&#xff0c;综合的过程可能还要满足某种其他要求&#xff0c;如功率、操作频率等。 有…

功能强大的流式文本编辑器 sed

前言 最近在写项目的升级脚本&#xff0c;发现以前学习的shell命令忘得一干二净&#xff0c;磕磕绊绊总算把脚本写完。这里先简单总结一下文本编辑器sed使用&#xff0c;如有纰漏&#xff0c;望批评指正。 sed 功能强大的流式文本编辑器 补充说明 sed 是一种流编辑器&…

笔试,猴子吃香蕉,多线程写法

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 …

【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

文章目录 1.WinForm文件结构2. 窗体的常用属性、方法与事件2.1 常用属性&#xff08;可直接在属性中设置&#xff09;2.2 常用方法2.3 常用事件 3.Label、TextBox及Button控件4.RadioButton和CheckBox5.ListBox&#xff08;列表框&#xff09; 1.WinForm文件结构 .sln文件 &am…

华为OD 最大岛屿体积(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应往年部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为OD…

14、按钮和多选框

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录注册</title> </head> <body> <h1>注册</h1><!--表单form action&#xff1a;表示表单要提交到哪个位置&#x…

zabbix6.0 部署配置

架构 先简单介绍zabbix监控的最主要的两个组件&#xff1a; zabbix server zabbix agent server 用来部署 web console以及相关的数据存储&#xff0c;所以需要配合一些数据库来保存数据&#xff0c;比如mysql,pgsql, 又有前端的页面所以还需要配置 nginx 和getway 所以 serve…

Unity 文字显示动画(2)

针对第一版的优化&#xff0c;自动适配文字大小&#xff0c;TextMeshPro可以拓展各种语言。第一版字母类语言效果更好。 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI;public partial class TextBeat…

基于C#使用winform技术的游戏平台的实现【C#课程设计】

基于C#使用winform技术的游戏平台的实现【C#课程设计】 说明项目结构项目运行截图及实现的功能 部分代码一些说明(个人觉得一些难点的说明)一、ListView &#xff0c;ImageList 的综合使用二、图片上传以及picturebox 图片的动态替换三、图表插件的使用四、SQL工具类封装五、高…

Mybatis 简介(一)

这里使用的是3.5.11版本 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;P…

数学笔记1

目录 1、均值&#xff08;期望&#xff09;、方差、协方差 1、均值&#xff08;期望&#xff09;、方差、协方差 参考&#xff1a;https://blog.csdn.net/u010087338/article/details/117696482 均值、期望&#xff1a;估算样品集合的平均水平 $$$$

【proteus】8086 写一个汇编程序并调试

参考书籍&#xff1a;微机原理与接口技术——基于8086和Proteus仿真&#xff08;第3版&#xff09;p103-105&#xff0c;p119-122. 参考程序是p70&#xff0c;例4-1 在上一篇的基础上&#xff1a; 创建项目和汇编文件 写一个汇编程序并编译 双击8086的元件图&#xff1a; …

ant design vue Message 用法以及内容为 html片段情况

ant design vue 的 Message 用法 全局展示操作反馈信息 何时使用 # 可提供成功、警告和错误等反馈信息。顶部居中显示并自动消失&#xff0c;是一种不打断用户操作的轻量级提示方式。 全局配置&#xff1a; // main.ts// 进行全局配置 message.config({top: 0.7rem,//高度…

05 MIT线性代数-转置,置换,向量空间Transposes, permutations, spaces

1. Permutations P: execute row exchanges becomes PA LU for any invertible A Permutations P identity matrix with reordered rows mn (n-1) ... (3) (2) (1) counts recordings, counts all nxn permuations 对于nxn矩阵存在着n!个置换矩阵 , 2. Transpose: 2.…

【数据结构】常见复杂度习题详解 ------ 习题篇

文章目录 &#x1f4cb;前言一. ⛳️前篇回顾二. ⛳️常见时间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三4️⃣实例四5️⃣实例五6️⃣实例六7️⃣实例七8️⃣实例八 三. ⛳️常见空间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三 四. ⛳️总结 &#x1f4cb;前言 …