算法打卡 Day34(贪心算法)-分发饼干 + 摆动序列 + 最大子序和

news/2024/9/23 7:27:33/

文章目录

  • 理论基础
  • Leetcode 455-分发饼干
    • 题目描述
    • 解题思路
    • 类似题目
      • 2410-运动员和训练师的最大匹配数
  • Leetcode 376-摆动序列
    • 题目描述
    • 解题思路
  • Leetcode 53-最大子序和
    • 题目描述
    • 解题思路

理论基础

贪心算法的本质是选择每一阶段的局部最优,从而达到全局最优。

贪心算法没有固定的套路,其是常识性推导 + 举反例。

其一般的解题步骤可以分为四步:

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

Leetcode 455-分发饼干

题目描述

https://leetcode.cn/problems/assign-cookies/description/

在这里插入图片描述

解题思路

这道题的思路可以是尽量用较小的饼干满足胃口较小的孩子的需求,在分发饼干前,需要对胃口值和饼干尺寸进行排序。

class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {int result = 0;sort(g.begin(), g.end());sort(s.begin(),s.end());int cIndex = 0;for (int i =0; i <s.size(); i++){if (cIndex<g.size() && s[i]>=g[cIndex]){cIndex++; result++;}}return result;}
};

类似题目

2410-运动员和训练师的最大匹配数

https://leetcode.cn/problems/maximum-matching-of-players-with-trainers/description/

在这里插入图片描述

class Solution {
public:int matchPlayersAndTrainers(vector<int>& players, vector<int>& trainers) {sort(players.begin(),players.end());sort(trainers.begin(),trainers.end());int count = 0;int j = 0;for (int i = 0; i < trainers.size();i++){if (j < players.size() && trainers[i]>=players[j]){j++; count++;}}return count;}
};

Leetcode 376-摆动序列

题目描述

https://leetcode.cn/problems/wiggle-subsequence/description/
在这里插入图片描述

解题思路

寻找摆动序列可以寻找序列中的转折点,可以通过画图清楚的描述出来。

我们通过 prediff 和 curdiff 记录当前数字前和后的坡度值,从而比较当前值是否为转折点

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int curdiff = 0;int prediff = 0;int count = 1;if (nums.size()==1) return count;for (int i = 0; i < nums.size()-1;i++){curdiff = nums[i+1]- nums[i];if (curdiff > 0 && prediff <= 0 || curdiff < 0 && prediff >= 0){count++;prediff = curdiff;}}return count;}
};

Leetcode 53-最大子序和

题目描述

https://leetcode.cn/problems/subsets-ii/description/

在这里插入图片描述

解题思路

遍历整个数组,判断是否要继续进行累计还是重新开始的规则是,判断累加和是否为正数,只有当累加和不小于 0 时,继续进行累计才可以保证不拖累后续的数字

class Solution {
public:int maxSubArray(vector<int>& nums) {int result = INT_MIN;int count = 0;for (int i = 0;i <nums.size();i++){count += nums[i];if (count > result) result = count;if (count < 0) count = 0;}return result;}
};

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

相关文章

全国832个贫困县名单及精准扶贫脱贫数据(2016-2020.11)

自党的十八大以来&#xff0c;通过全党全国各族人民的共同努力&#xff0c;中国成功实现了现行标准下9899万农村贫困人口的全部脱贫&#xff0c;832个贫困县全部摘帽。 摘帽名单 2016年-2020.11全国832个贫困县名单及精准扶贫脱贫数据整理&#xff08;大数据&#xff09;https…

基础算法(4)——前缀和

1. 前缀和 题目描述&#xff1a; 解法一&#xff1a;暴力解法 直接模拟实现题目流程即可 时间复杂度为&#xff0c;根据题目给出的条件&#xff0c;肯定会超时 解法二&#xff1a;前缀和&#xff08;适用题型&#xff1a;快速 求出数组中某一个 连续区间 的 和&#xff09;…

文件上传-php

查找方式 ***(1) 黑盒 查找(upload) 扫描 (2) 应用型 窗口 上传中心或者后台中心 上传 Ps:后台是后台 权限是权限 (3) 会员中心 (4) 白盒 基本函数定义 写前端的 Enctype 上传类型Method 提交方式Onsubmit 鼠标的时间Action"放在指定文件"Php 接受表单数据 isset(…

Android 新增目录怎么加入git

一服务器创建仓库 一个新的目录增加到仓库中&#xff0c;需要仓库有对应的仓库地址&#xff0c;这个让管理员在服务器段创建仓库地址和对应的文件夹名称&#xff0c; 例如&#xff1a;需求是系统需要增加一个中文输入法&#xff0c;我增加一个输入法的目录&#xff0c;管理员创…

网络安全(黑客技术)2024新版自学手册路线

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、…

【工具】Java Excel转图片

【工具】Java Excel转图片 package com.yj.luban.modules.office.excel;import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import javax.imageio.ImageIO; import java.awt.Color; import java.awt.Font; import java.awt.*; import …

Android 命令行关机

在 Android 设备上&#xff0c;可以通过以下命令行命令来关机&#xff1a; adb shell reboot -p其中&#xff1a; adb shell&#xff1a;通过 ADB 进入设备的命令行环境。reboot -p&#xff1a;执行关机操作&#xff0c;-p 表示关机而不是重启。 如果你是在设备本地的终端上而…

怎么在路由器上使用tcpdump抓包

怎么在路由器上使用tcpdump抓包 1&#xff09;下载tcpdump包到桌面&#xff0c;路由器界面进入 /tmp目录&#xff0c;/目录无法安装 2&#xff09;开启ftp服务—可以安装IPOP4.1.exe软件&#xff0c;打开服务–ftp列 3&#xff09;连接本机的ftp服务器—ftp 192.168.1.2 &#…