贪心算法学习三

例题一


解法(贪⼼):
贪⼼策略:
⽤尽可能多的字符去构造回⽂串:
a. 如果字符出现偶数个,那么全部都可以⽤来构造回⽂串;
b. 如果字符出现奇数个,减去⼀个之后,剩下的字符能够全部⽤来构造回⽂串;
c. 最后再判断⼀下,如果有字符出现奇数个,就把它单独拿出来放在中间。

例题二


解法(贪⼼):
贪⼼策略:
a. 当遇到 'I' 的时候,为了让下⼀个上升的数可选择的「范围更多」,当前选择「最⼩」的那个数;
b. 当遇到 'D' 的时候,为了让下⼀个下降的数可选择的「范围更多」,选择当前「最⼤」的那个数。

例题三


贪⼼策略:
先将两个数组排序。
针对胃⼝较⼩的孩⼦,从⼩到⼤挑选饼⼲:
i. 如果当前饼⼲能满⾜,直接喂(最⼩的饼⼲都能满⾜,不要浪费⼤饼⼲);
ii. 如果当前饼⼲不能满⾜,放弃这个饼⼲,去检测下⼀个饼⼲(这个饼⼲连最⼩胃⼝的孩⼦都⽆法满⾜,更别提那些胃⼝⼤的孩⼦了)。

例题四


解法(贪⼼):
贪⼼策略:
在最终的结果中,前两个数的位置是⽆法改变的。因为每⼀个数的都是⼤于等于 2 的,为了让结果更⼤,我们应该尽可能的把剩下的数全都放在「分⼦」上.

例题五


解法(动态规划 + 类似层序遍历):
动态规划:
a. 状态表⽰:
dp[i] 表⽰从 0 位置开始,到达 i 位置时候的最⼩跳跃次数。
b. 状态转移⽅程:
对于 dp[i] ,我们遍历 0 ~ i - 1 区间(⽤指针 j 表⽰),只要能够从 j 位置跳到 i 位置( nums[j] + j >= i ),我们就⽤ dp[j] + 1 更新 dp[i] ⾥⾯的值,找到所有情况下的最⼩值即可。
类似层序遍历的过程:
⽤类似层序遍历的过程,将第 i 次跳跃的「起始位置」和「结束位置」找出来,⽤这次跳跃的情
况,更新出下⼀次跳跃的「起始位置」和「终⽌位置」。这样「循环往复」,就能更新出到达 n - 1 位置的最⼩跳跃步数。

例题六


解法:
和 跳跃游戏II ⼀样,仅需修改⼀下返回值即可。

相关推荐
李小白杂货铺16 分钟前
识别和破除信息茧房
算法·信息茧房·识别信息茧房·破除信息茧房·算法推荐型茧房·观点过滤型茧房·茧房
_李小白28 分钟前
【OPENGL ES 3.0 学习笔记】第十七天:模型矩阵、视图矩阵与投影矩阵
笔记·学习·矩阵
淮北49442 分钟前
windows11配置wsl安装ubuntu20.04
windows·学习·ubuntu·wsl
来荔枝一大筐1 小时前
C++ LeetCode 力扣刷题 541. 反转字符串 II
c++·算法·leetcode
霜绛1 小时前
C#知识补充(一)——ref和out、成员属性、万物之父和装箱拆箱、抽象类和抽象方法、接口
开发语言·笔记·学习·c#
暴风鱼划水1 小时前
算法题(Python)数组篇 | 6.区间和
python·算法·数组·区间和
2301_796512522 小时前
Rust编程学习 - 如何利用代数类型系统做错误处理的另外一大好处是可组合性(composability)
java·学习·rust
zl_vslam2 小时前
SLAM中的非线性优-3D图优化之轴角在Opencv-PNP中的应用(一)
前端·人工智能·算法·计算机视觉·slam se2 非线性优化
是苏浙2 小时前
零基础入门C语言之C语言实现数据结构之顺序表应用
c语言·数据结构·算法
lkbhua莱克瓦243 小时前
Java基础——常用算法3
java·数据结构·笔记·算法·github·排序算法·学习方法