mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +08:00
Update
This commit is contained in:
@ -19,6 +19,8 @@
|
|||||||
[1,4],
|
[1,4],
|
||||||
]
|
]
|
||||||
|
|
||||||
|
也可以直接看我的B站视频:[带你学透回溯算法-组合问题(对应力扣题目:77.组合)](https://www.bilibili.com/video/BV1ti4y1L7cv#reply3733925949)
|
||||||
|
|
||||||
# 思路
|
# 思路
|
||||||
|
|
||||||
本题这是回溯法的经典题目。
|
本题这是回溯法的经典题目。
|
||||||
|
@ -21,6 +21,8 @@ https://leetcode-cn.com/problems/valid-anagram/
|
|||||||
|
|
||||||
**数组其实就是一个简单哈希表**,而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。
|
**数组其实就是一个简单哈希表**,而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。
|
||||||
|
|
||||||
|
如果对哈希表的理论基础关于数组,set,map不了解的话可以看这篇:[关于哈希表,你该了解这些!](https://mp.weixin.qq.com/s/g8N6WmoQmsCUw3_BaWxHZA)
|
||||||
|
|
||||||
需要定义一个多大的数组呢,定一个数组叫做record,大小为26 就可以了,初始化为0,因为字符a到字符z的ASCII也是26个连续的数值。
|
需要定义一个多大的数组呢,定一个数组叫做record,大小为26 就可以了,初始化为0,因为字符a到字符z的ASCII也是26个连续的数值。
|
||||||
|
|
||||||
为了方便举例,判断一下字符串s= "aee", t = "eae"。
|
为了方便举例,判断一下字符串s= "aee", t = "eae"。
|
||||||
@ -43,6 +45,8 @@ https://leetcode-cn.com/problems/valid-anagram/
|
|||||||
|
|
||||||
时间复杂度为O(n),空间上因为定义是的一个常量大小的辅助数组,所以空间复杂度为O(1)。
|
时间复杂度为O(n),空间上因为定义是的一个常量大小的辅助数组,所以空间复杂度为O(1)。
|
||||||
|
|
||||||
|
看完这篇哈希表总结:[哈希表:总结篇!(每逢总结必经典)](https://mp.weixin.qq.com/s/1s91yXtarL-PkX07BfnwLg),详细就可以哈希表的各种用法非常清晰了。
|
||||||
|
|
||||||
# C++ 代码
|
# C++ 代码
|
||||||
```
|
```
|
||||||
class Solution {
|
class Solution {
|
||||||
@ -67,5 +71,8 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
> 更过算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。
|
> **我是[程序员Carl](https://github.com/youngyangyang04),[组队刷题](https://img-blog.csdnimg.cn/20201115103410182.png)可以找我,本文[leetcode刷题攻略](https://github.com/youngyangyang04/leetcode-master)已收录,更多[精彩算法文章](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUxNjY5NTYxNA==&action=getalbum&album_id=1485825793120387074&scene=173#wechat_redirect)尽在:[代码随想录](https://img-blog.csdnimg.cn/20200815195519696.png),关注后就会发现和「代码随想录」相见恨晚!**
|
||||||
|
|
||||||
|
**如果感觉题解对你有帮助,不要吝啬给一个👍吧!**
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
> leetcode上版本
|
||||||
|
|
||||||
本题是KMP 经典题目。
|
本题是KMP 经典题目。
|
||||||
|
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
|
# 关于贪心算法,你该了解这些!
|
||||||
|
|
||||||
## 什么是贪心
|
> 正式开始新的系列了,贪心算法!
|
||||||
|
通知:一些录友表示经常看不到每天的文章,现在公众号已经不按照发送时间推荐了,而是根据一些规则乱序推送,所以可能关注了「代码随想录」也一直看不到文章,建议把「代码随想录」设置星标哈,设置星标之后,每天就按发文时间推送了,我每天都是定时8:35发送的,嗷嗷准时,哈哈。
|
||||||
|
|
||||||
|
# 什么是贪心
|
||||||
|
|
||||||
**贪心的本质是选择每一阶段的局部最优,从而达到全局最优**。
|
**贪心的本质是选择每一阶段的局部最优,从而达到全局最优**。
|
||||||
|
|
||||||
@ -11,9 +15,9 @@
|
|||||||
|
|
||||||
每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。
|
每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。
|
||||||
|
|
||||||
再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,一定不行。这时候就需要动态规划。动态规划的问题在下一个系列会详细讲解。
|
再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。动态规划的问题在下一个系列会详细讲解。
|
||||||
|
|
||||||
## 贪心的套路(什么时候用贪心)
|
# 贪心的套路(什么时候用贪心)
|
||||||
|
|
||||||
很多同学做贪心的题目的时候,想不出来是贪心,想知道有没有什么套路可以一看就看出来是贪心。
|
很多同学做贪心的题目的时候,想不出来是贪心,想知道有没有什么套路可以一看就看出来是贪心。
|
||||||
|
|
||||||
@ -46,13 +50,13 @@
|
|||||||
|
|
||||||
**例如刚刚举的拿钞票的例子,就是模拟一下每次拿做大的,最后就能拿到最多的钱,这还要数学证明的话,其实就不在算法面试的范围内了,可以看看专业的数学书籍!**
|
**例如刚刚举的拿钞票的例子,就是模拟一下每次拿做大的,最后就能拿到最多的钱,这还要数学证明的话,其实就不在算法面试的范围内了,可以看看专业的数学书籍!**
|
||||||
|
|
||||||
所以这也是为什么很多同学通过(accept)了贪心的题目,但都不知道自己用了贪心算法,因为贪心有时候就是常识性的推导,所以会认为本应该就这么做!
|
所以这也是为什么很多同学通过(accept)了贪心的题目,但都不知道自己用了贪心算法,**因为贪心有时候就是常识性的推导,所以会认为本应该就这么做!**
|
||||||
|
|
||||||
**那么刷题的时候什么时候真的需要数学推导呢?**
|
**那么刷题的时候什么时候真的需要数学推导呢?**
|
||||||
|
|
||||||
例如环形链表2,这道题目不用数学推导一下,就找不出环的起始位置,想试一下就不知道怎么试,这种题目确实需要数学简单推导一下。
|
例如这道题目:[链表:环找到了,那入口呢?](https://mp.weixin.qq.com/s/_QVP3IkRZWx9zIpQRgajzA),这道题不用数学推导一下,就找不出环的起始位置,想试一下就不知道怎么试,这种题目确实需要数学简单推导一下。
|
||||||
|
|
||||||
## 贪心一般解题步骤
|
# 贪心一般解题步骤
|
||||||
|
|
||||||
贪心算法一般分为如下四步:
|
贪心算法一般分为如下四步:
|
||||||
|
|
||||||
@ -61,22 +65,16 @@
|
|||||||
* 求解每一个子问题的最优解
|
* 求解每一个子问题的最优解
|
||||||
* 将局部最优解堆叠成全局最优解
|
* 将局部最优解堆叠成全局最优解
|
||||||
|
|
||||||
一个子问题的最优解会是下一个子问题最优解的一部分,重复这个操作直到推出整个问题的最优解!
|
其实这个分的有点细了,真正做题的时候很难分出这么详细的解题步骤,可能就是因为贪心的题目往往还和其他方面的知识混在一起。
|
||||||
|
|
||||||
# 总结
|
# 总结
|
||||||
|
|
||||||
理论篇给出了什么是贪心以及大家关心的贪心算法固定套路。
|
本篇给出了什么是贪心以及大家关心的贪心算法固定套路。
|
||||||
|
|
||||||
不好意思了,贪心没有套路,平时刷题或者面试的时候就是常识性推导加上举反例。
|
**不好意思了,贪心没有套路,说白了就是常识性推导加上举反例**。
|
||||||
|
|
||||||
最后给出一个贪心的一般解题步骤,大家可以发现这个解题步骤也是毕竟抽象的,不像是 二叉树,回溯算法,给出了那么具体的解题套路和模板。
|
最后给出贪心的一般解题步骤,大家可以发现这个解题步骤也是比较抽象的,不像是二叉树,回溯算法,给出了那么具体的解题套路和模板。
|
||||||
|
|
||||||
|
本篇没有配图,其实可以找一些动漫周边或者搞笑的图配一配(符合大多数公众号文章的作风),但这不是我的风格,所以本篇文字描述足以!
|
||||||
|
|
||||||
|
就酱,「代码随想录」值得你的关注!
|
||||||
|
|
||||||
|
|
||||||
贪心算法的应用
|
|
||||||
对数据压缩编码的霍夫曼编码(Huffman Coding)
|
|
||||||
求最小生成树的 Prim 算法
|
|
||||||
求单源最短路径的Dijkstra算法
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user