Merge pull request #2205 from jinbudaily/master

更新 贪心算法章节 排版格式修复
This commit is contained in:
程序员Carl
2023-07-26 14:50:24 +08:00
committed by GitHub
20 changed files with 85 additions and 75 deletions

View File

@ -25,9 +25,9 @@
说明:
假设你总是可以到达数组的最后一个位置。
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法,最少跳几步还得看覆盖范围 | LeetCode 45.跳跃游戏 II](https://www.bilibili.com/video/BV1Y24y1r7XZ),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法,最少跳几步还得看覆盖范围 | LeetCode 45.跳跃游戏 II](https://www.bilibili.com/video/BV1Y24y1r7XZ),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
@ -53,7 +53,7 @@
**图中覆盖范围的意义在于,只要红色的区域,最多两步一定可以到!(不用管具体怎么跳,反正一定可以跳到)**
## 方法一
### 方法一
从图中可以看出来,就是移动下标达到了当前覆盖的最远距离下标时,步数就要加一,来增加覆盖距离。最后的步数就是最少步数。
@ -90,7 +90,7 @@ public:
* 空间复杂度: O(1)
## 方法二
### 方法二
依然是贪心,思路和方法一差不多,代码可以简洁一些。
@ -469,3 +469,4 @@ impl Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -310,3 +310,4 @@ class Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -17,7 +17,7 @@
## 算法公开课
**《代码随想录》算法视频公开课:[看起来复杂,其实是简单动态规划 | LeetCode53.最大子序和](https://www.bilibili.com/video/BV19V4y1F7b5),相信结合视频再看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[看起来复杂,其实是简单动态规划 | LeetCode53.最大子序和](https://www.bilibili.com/video/BV19V4y1F7b5),相信结合视频再看本篇题解,更有助于大家对本题的理解**。
## 思路
@ -97,8 +97,8 @@ public:
## 其他语言版本
### Java:
Java
```java
/**
* 1.dp[i]代表当前下标对应的最大值
@ -140,7 +140,8 @@ class Solution {
}
```
Python
### Python
```python
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
@ -153,7 +154,8 @@ class Solution:
return result
```
Go
### Go
```Go
// solution
// 1, dp
@ -184,7 +186,7 @@ func max(a,b int) int{
}
```
JavaScript
### JavaScript
```javascript
const maxSubArray = nums => {
@ -203,8 +205,7 @@ const maxSubArray = nums => {
};
```
Scala:
### Scala:
```scala
object Solution {
@ -221,7 +222,7 @@ object Solution {
}
```
TypeScript
### TypeScript
```typescript
function maxSubArray(nums: number[]): number {
@ -244,3 +245,4 @@ function maxSubArray(nums: number[]): number {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -26,9 +26,9 @@
- 输出: false
- 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 所以你永远不可能到达最后一个位置。
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法,怎么跳跃不重要,关键在覆盖范围 | LeetCode55.跳跃游戏](https://www.bilibili.com/video/BV1VG4y1X7kB),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法,怎么跳跃不重要,关键在覆盖范围 | LeetCode55.跳跃游戏](https://www.bilibili.com/video/BV1VG4y1X7kB),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路

View File

@ -22,9 +22,9 @@
* 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
* 注意输入类型已于2019年4月15日更改。 请重置默认代码定义以获取新方法签名。
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法合并区间有细节LeetCode56.合并区间](https://www.bilibili.com/video/BV1wx4y157nD),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法合并区间有细节LeetCode56.合并区间](https://www.bilibili.com/video/BV1wx4y157nD),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
@ -341,3 +341,4 @@ impl Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -37,9 +37,9 @@
- 1 <= prices.length <= 3 \* 10 ^ 4
- 0 <= prices[i] <= 10 ^ 4
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法也能解决股票问题LeetCode122.买卖股票最佳时机 II](https://www.bilibili.com/video/BV1ev4y1C7na),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法也能解决股票问题LeetCode122.买卖股票最佳时机 II](https://www.bilibili.com/video/BV1ev4y1C7na),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
@ -316,7 +316,7 @@ function maxProfit(prices: number[]): number {
}
```
### Rust
### Rust
贪心:
@ -389,7 +389,7 @@ int maxProfit(int* prices, int pricesSize){
}
```
### Scala
### Scala
贪心:
@ -411,3 +411,4 @@ object Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -45,12 +45,14 @@
* 解释:
你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油。开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油。开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油。你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。因此,无论怎样,你都不可能绕环路行驶一周。
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法得这么加油才能跑完全程LeetCode 134.加油站](https://www.bilibili.com/video/BV1jA411r7WX),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法得这么加油才能跑完全程LeetCode 134.加油站](https://www.bilibili.com/video/BV1jA411r7WX),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
## 暴力方法
### 暴力方法
暴力的方法很明显就是O(n^2)的,遍历每一个加油站为起点的情况,模拟一圈。
@ -85,7 +87,7 @@ public:
* 空间复杂度O(1)
## 贪心算法(方法一)
### 贪心算法(方法一)
直接从全局进行贪心选择,情况如下:
@ -134,7 +136,7 @@ public:
但不管怎么说,解法毕竟还是巧妙的,不用过于执着于其名字称呼。
## 贪心算法(方法二)
### 贪心算法(方法二)
可以换一个思路,首先如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。
@ -633,3 +635,4 @@ object Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -28,9 +28,9 @@
* 输出: 4
* 解释: 你可以分别给这三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖果,这已满足上述两个条件。
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法两者兼顾很容易顾此失彼LeetCode135.分发糖果](https://www.bilibili.com/video/BV1ev4y1r7wN),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法两者兼顾很容易顾此失彼LeetCode135.分发糖果](https://www.bilibili.com/video/BV1ev4y1r7wN),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
@ -234,7 +234,7 @@ func findMax(num1 int, num2 int) int {
}
```
### Javascript:
### Javascript
```Javascript
var candy = function(ratings) {
let candys = new Array(ratings.length).fill(1)
@ -376,3 +376,4 @@ object Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -33,11 +33,13 @@
- 输入: [1,2,3,4,5,6,7,8,9]
- 输出: 2
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法,寻找摆动有细节!| LeetCode376.摆动序列](https://www.bilibili.com/video/BV17M411b7NS),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法,寻找摆动有细节!| LeetCode376.摆动序列](https://www.bilibili.com/video/BV17M411b7NS),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路 1贪心解法
## 思路
### 思路 1贪心解法
本题要求通过从原始序列中删除一些(也可以不删除)元素来获得子序列,剩下的元素保持其原始顺序。
@ -69,7 +71,7 @@
2. 情况二:数组首尾两端
3. 情况三:单调坡中有平坡
### 情况一:上下坡中有平坡
#### 情况一:上下坡中有平坡
例如 [1,2,2,2,1]这样的数组,如图:
@ -87,7 +89,7 @@
所以我们记录峰值的条件应该是: `(preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0)`,为什么这里允许 prediff == 0 ,就是为了 上面我说的这种情况。
### 情况二:数组首尾两端
#### 情况二:数组首尾两端
所以本题统计峰值的时候,数组最左面和最右面如何统计呢?
@ -142,7 +144,7 @@ public:
所以此时我们要讨论情况三!
### 情况三:单调坡度有平坡
#### 情况三:单调坡度有平坡
在版本一中,我们忽略了一种情况,即 如果在一个单调坡度上有平坡,例如[1,2,2,2,3,4],如图:
@ -187,7 +189,7 @@ public:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20230108174452.png)
## 思路 2动态规划
### 思路 2动态规划
考虑用动态规划的思想来解决这个问题。
@ -696,4 +698,3 @@ object Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -37,9 +37,9 @@
题目数据确保队列可以被重建
# 视频讲解
## 算法公开课
**代码随想录算法视频公开课[贪心算法,不要两边一起贪,会顾此失彼 | LeetCode406.根据身高重建队列](https://www.bilibili.com/video/BV1EA411675Y)相信结合视频在看本篇题解更有助于大家对本题的理解**。
**[代码随想录算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法,不要两边一起贪,会顾此失彼 | LeetCode406.根据身高重建队列](https://www.bilibili.com/video/BV1EA411675Y)相信结合视频在看本篇题解更有助于大家对本题的理解**。
## 思路
@ -402,3 +402,4 @@ object Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -30,9 +30,9 @@
* 输出: 0
* 解释: 你不需要移除任何区间,因为它们已经是无重叠的了。
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法,依然是判断重叠区间 | LeetCode435.无重叠区间](https://www.bilibili.com/video/BV1A14y1c7E1),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法,依然是判断重叠区间 | LeetCode435.无重叠区间](https://www.bilibili.com/video/BV1A14y1c7E1),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
@ -89,9 +89,9 @@ public:
大家此时会发现如此复杂的一个问题,代码实现却这么简单!
## 补充
## 补充1
### 补充1
左边界排序可不可以呢?
@ -144,7 +144,7 @@ public:
```
## 补充2
### 补充2
本题其实和[452.用最少数量的箭引爆气球](https://programmercarl.com/0452.用最少数量的箭引爆气球.html)非常像,弓箭的数量就相当于是非交叉区间的数量,只要把弓箭那道题目代码里射爆气球的判断条件加个等号(认为[01][12]不是相邻区间),然后用总区间数减去弓箭数量 就是要移除的区间数量了。
@ -311,7 +311,7 @@ func min(a, b int) int {
}
```
### Javascript:
### Javascript
- 按右边界排序
```Javascript
var eraseOverlapIntervals = function(intervals) {
@ -447,3 +447,4 @@ impl Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -42,9 +42,9 @@
* points[i].length == 2
* -2^31 <= xstart < xend <= 2^31 - 1
# 视频讲解
## 算法公开课
**代码随想录算法视频公开课[贪心算法,判断重叠区间问题 | LeetCode452.用最少数量的箭引爆气球](https://www.bilibili.com/video/BV1SA41167xe)相信结合视频在看本篇题解更有助于大家对本题的理解**。
**[代码随想录算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法,判断重叠区间问题 | LeetCode452.用最少数量的箭引爆气球](https://www.bilibili.com/video/BV1SA41167xe)相信结合视频在看本篇题解更有助于大家对本题的理解**。
## 思路

View File

@ -30,9 +30,9 @@
- 0 <= s.length <= 3 \* 10^4
- 1 <= g[i], s[j] <= 2^31 - 1
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法,你想先喂哪个小孩?| LeetCode455.分发饼干](https://www.bilibili.com/video/BV1MM411b7cq),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法,你想先喂哪个小孩?| LeetCode455.分发饼干](https://www.bilibili.com/video/BV1MM411b7cq),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路

View File

@ -26,12 +26,14 @@
说明: N 是在 [0, 10^9] 范围内的一个整数。
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法思路不难想但代码不好写LeetCode:738.单调自增的数字](https://www.bilibili.com/video/BV1Kv4y1x7tP),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法思路不难想但代码不好写LeetCode:738.单调自增的数字](https://www.bilibili.com/video/BV1Kv4y1x7tP),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
## 暴力解法
### 暴力解法
题意很简单,那么首先想的就是暴力解法了,来我替大家暴力一波,结果自然是超时!
@ -62,7 +64,7 @@ public:
* 时间复杂度O(n × m) m为n的数字长度
* 空间复杂度O(1)
## 贪心算法
### 贪心算法
题目要求小于等于N的最大单调递增的整数那么拿一个两位的数字来举例。
@ -120,7 +122,7 @@ public:
## 其他语言版本
### Java
### Java
```java
版本1
class Solution {
@ -163,7 +165,7 @@ class Solution {
```
### Python
### Python
暴力
```python
class Solution:
@ -395,3 +397,4 @@ impl Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -24,9 +24,9 @@
* S的长度在[1, 500]之间。
* S只包含小写字母 'a' 到 'z' 。
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法,寻找最远的出现位置! LeetCode763.划分字母区间](https://www.bilibili.com/video/BV18G4y1K7d5),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法,寻找最远的出现位置! LeetCode763.划分字母区间](https://www.bilibili.com/video/BV18G4y1K7d5),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
@ -409,3 +409,4 @@ impl Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -50,9 +50,9 @@
* 0 <= bills.length <= 10000
* bills[i] 不是 5 就是 10 或是 20 
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法看上去复杂其实逻辑都是固定的LeetCode860.柠檬水找零](https://www.bilibili.com/video/BV12x4y1j7DD),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法看上去复杂其实逻辑都是固定的LeetCode860.柠檬水找零](https://www.bilibili.com/video/BV12x4y1j7DD),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
@ -403,3 +403,4 @@ object Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -38,9 +38,9 @@
* 给定树的节点数的范围是 [1, 1000]。
* 每个节点的值都是 0。
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法,二叉树与贪心的结合,有点难...... LeetCode:968.监督二叉树](https://www.bilibili.com/video/BV1SA411U75i),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法,二叉树与贪心的结合,有点难...... LeetCode:968.监督二叉树](https://www.bilibili.com/video/BV1SA411U75i),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
@ -732,3 +732,4 @@ impl Solution {
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -34,9 +34,9 @@
* 1 <= K <= 10000
* -100 <= A[i] <= 100
# 视频讲解
## 算法公开课
**《代码随想录》算法视频公开课:[贪心算法这不就是常识还能叫贪心LeetCode1005.K次取反后最大化的数组和](https://www.bilibili.com/video/BV138411G7LY),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[贪心算法这不就是常识还能叫贪心LeetCode1005.K次取反后最大化的数组和](https://www.bilibili.com/video/BV138411G7LY),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路

View File

@ -165,19 +165,9 @@ public:
相信在这里学习算法的录友们,都是想在软件行业长远发展的,都是要从事编程的工作,那么一定要深耕好一门编程语言,这个非常重要!
## 其他语言版本
Java
Python
Rust
### Rust
```rust
// 版本二使用list链表
@ -206,8 +196,7 @@ impl Solution{
}
```
Go
### Go
Go中slice的`append`操作和C++中vector的扩容机制基本相同。
@ -224,3 +213,4 @@ Go中slice的`append`操作和C++中vector的扩容机制基本相同。
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

View File

@ -154,3 +154,4 @@ Carl个人认为如果找出局部最优并可以推出全局最优就是
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>