Skip to content

Commit

Permalink
541~1382连接合并+commit之前 gitpull
Browse files Browse the repository at this point in the history
  • Loading branch information
XuDaHaoRen committed Aug 24, 2021
1 parent 059b547 commit 8c74868
Show file tree
Hide file tree
Showing 37 changed files with 97 additions and 155 deletions.
4 changes: 2 additions & 2 deletions problems/0583.两个字符串的删除操作.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 583. 两个字符串的删除操作

题目链接:https://leetcode-cn.com/problems/delete-operation-for-two-strings/
[力扣题目链接](https://leetcode-cn.com/problems/delete-operation-for-two-strings/)

给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。

Expand All @@ -20,7 +20,7 @@

## 思路

本题和[动态规划:115.不同的子序列](https://mp.weixin.qq.com/s/1SULY2XVSROtk_hsoVLu8A)相比,其实就是两个字符串可以都可以删除了,情况虽说复杂一些,但整体思路是不变的。
本题和[动态规划:115.不同的子序列](https://programmercarl.com/0115.不同的子序列.html)相比,其实就是两个字符串可以都可以删除了,情况虽说复杂一些,但整体思路是不变的。

这次是两个字符串可以相互删了,这种题目也知道用动态规划的思路来解,动规五部曲,分析如下:

Expand Down
6 changes: 3 additions & 3 deletions problems/0617.合并二叉树.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 617.合并二叉树

题目地址:https://leetcode-cn.com/problems/merge-two-binary-trees/
[力扣题目链接](https://leetcode-cn.com/problems/merge-two-binary-trees/)

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

Expand Down Expand Up @@ -165,7 +165,7 @@ public:

使用迭代法,如何同时处理两棵树呢?

思路我们在[二叉树:我对称么?](https://mp.weixin.qq.com/s/Kgf0gjvlDlNDfKIH2b1Oxg)中的迭代法已经讲过一次了,求二叉树对称的时候就是把两个树的节点同时加入队列进行比较。
思路我们在[二叉树:我对称么?](https://programmercarl.com/0101.对称二叉树.html)中的迭代法已经讲过一次了,求二叉树对称的时候就是把两个树的节点同时加入队列进行比较。

本题我们也使用队列,模拟的层序遍历,代码如下:

Expand Down Expand Up @@ -245,7 +245,7 @@ public:
合并二叉树,也是二叉树操作的经典题目,如果没有接触过的话,其实并不简单,因为我们习惯了操作一个二叉树,一起操作两个二叉树,还会有点懵懵的。
这不是我们第一次操作两颗二叉树了,在[二叉树:我对称么?](https://mp.weixin.qq.com/s/Kgf0gjvlDlNDfKIH2b1Oxg)中也一起操作了两棵二叉树。
这不是我们第一次操作两颗二叉树了,在[二叉树:我对称么?](https://programmercarl.com/0101.对称二叉树.html)中也一起操作了两棵二叉树。
迭代法中,一般一起操作两个树都是使用队列模拟类似层序遍历,同时处理两个树的节点,这种方式最好理解,如果用模拟递归的思路的话,要复杂一些。
Expand Down
2 changes: 1 addition & 1 deletion problems/0647.回文子串.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 647. 回文子串

题目链接:https://leetcode-cn.com/problems/palindromic-substrings/
[力扣题目链接](https://leetcode-cn.com/problems/palindromic-substrings/)

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

Expand Down
2 changes: 1 addition & 1 deletion problems/0649.Dota2参议院.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Dota2 参议院由来自两派的参议员组成。现在参议院希望对一

局部最优可以退出全局最优,举不出反例,那么试试贪心。

如果对贪心算法理论基础还不了解的话,可以看看这篇:[关于贪心算法,你该了解这些!](https://mp.weixin.qq.com/s/O935TaoHE9Eexwe_vSbRAg) ,相信看完之后对贪心就有基本的了解了。
如果对贪心算法理论基础还不了解的话,可以看看这篇:[关于贪心算法,你该了解这些!](https://programmercarl.com/贪心算法理论基础.html) ,相信看完之后对贪心就有基本的了解了。

# 代码实现

Expand Down
6 changes: 3 additions & 3 deletions problems/0654.最大二叉树.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 654.最大二叉树

题目地址:https://leetcode-cn.com/problems/maximum-binary-tree/
[力扣题目地址](https://leetcode-cn.com/problems/maximum-binary-tree/)

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

Expand Down Expand Up @@ -143,7 +143,7 @@ public:
以上代码比较冗余,效率也不高,每次还要切割的时候每次都要定义新的vector(也就是数组),但逻辑比较清晰。
和文章[二叉树:构造二叉树登场!](https://mp.weixin.qq.com/s/7r66ap2s-shvVvlZxo59xg)中一样的优化思路,就是每次分隔不用定义新的数组,而是通过下表索引直接在原数组上操作。
和文章[二叉树:构造二叉树登场!](https://programmercarl.com/0106.从中序与后序遍历序列构造二叉树.html)中一样的优化思路,就是每次分隔不用定义新的数组,而是通过下表索引直接在原数组上操作。
优化后代码如下:
Expand Down Expand Up @@ -212,7 +212,7 @@ root->right = traversal(nums, maxValueIndex + 1, right);

## 总结

这道题目其实和 [二叉树:构造二叉树登场!](https://mp.weixin.qq.com/s/7r66ap2s-shvVvlZxo59xg) 是一个思路,比[二叉树:构造二叉树登场!](https://mp.weixin.qq.com/s/7r66ap2s-shvVvlZxo59xg) 还简单一些。
这道题目其实和 [二叉树:构造二叉树登场!](https://programmercarl.com/0106.从中序与后序遍历序列构造二叉树.html) 是一个思路,比[二叉树:构造二叉树登场!](https://programmercarl.com/0106.从中序与后序遍历序列构造二叉树.html) 还简单一些。

**注意类似用数组构造二叉树的题目,每次分隔尽量不要定义新的数组,而是通过下表索引直接在原数组上操作,这样可以节约时间和空间上的开销。**

Expand Down
2 changes: 1 addition & 1 deletion problems/0657.机器人能否返回原点.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

# 657. 机器人能否返回原点

题目地址:https://leetcode-cn.com/problems/robot-return-to-origin/
[力扣题目链接](https://leetcode-cn.com/problems/robot-return-to-origin/)

在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。

Expand Down
4 changes: 2 additions & 2 deletions problems/0669.修剪二叉搜索树.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
## 669. 修剪二叉搜索树

题目链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree/
[力扣题目链接](https://leetcode-cn.com/problems/trim-a-binary-search-tree/)

给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。

Expand Down Expand Up @@ -71,7 +71,7 @@ public:
但是有返回值,更方便,可以通过递归函数的返回值来移除节点。
这样的做法在[二叉树:搜索树中的插入操作](https://mp.weixin.qq.com/s/lwKkLQcfbCNX2W-5SOeZEA)和[二叉树:搜索树中的删除操作](https://mp.weixin.qq.com/s/-p-Txvch1FFk3ygKLjPAKw)中大家已经了解过了。
这样的做法在[二叉树:搜索树中的插入操作](https://programmercarl.com/0701.二叉搜索树中的插入操作.html)和[二叉树:搜索树中的删除操作](https://programmercarl.com/0450.删除二叉搜索树中的节点.html)中大家已经了解过了。
代码如下:
Expand Down
10 changes: 5 additions & 5 deletions problems/0674.最长连续递增序列.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 674. 最长连续递增序列

题目链接:https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/
[力扣题目链接](https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/)

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

Expand All @@ -24,7 +24,7 @@
输入:nums = [2,2,2,2,2]
输出:1
解释:最长连续递增序列是 [2], 长度为1。
 

提示:

* 0 <= nums.length <= 10^4
Expand All @@ -33,7 +33,7 @@

## 思路

本题相对于昨天的[动态规划:300.最长递增子序列](https://mp.weixin.qq.com/s/f8nLO3JGfgriXep_gJQpqQ)最大的区别在于“连续”。
本题相对于昨天的[动态规划:300.最长递增子序列](https://programmercarl.com/0300.最长上升子序列.html)最大的区别在于“连续”。

本题要求的是最长**连续**递增序列

Expand All @@ -53,7 +53,7 @@

即:dp[i + 1] = dp[i] + 1;

**注意这里就体现出和[动态规划:300.最长递增子序列](https://mp.weixin.qq.com/s/f8nLO3JGfgriXep_gJQpqQ)的区别!**
**注意这里就体现出和[动态规划:300.最长递增子序列](https://programmercarl.com/0300.最长上升子序列.html)的区别!**

因为本题要求连续递增子序列,所以就必要比较nums[i + 1]与nums[i],而不用去比较nums[j]与nums[i] (j是在0到i之间遍历)。

Expand Down Expand Up @@ -144,7 +144,7 @@ public:

本题也是动规里子序列问题的经典题目,但也可以用贪心来做,大家也会发现贪心好像更简单一点,而且空间复杂度仅是O(1)。

在动规分析中,关键是要理解和[动态规划:300.最长递增子序列](https://mp.weixin.qq.com/s/f8nLO3JGfgriXep_gJQpqQ)的区别。
在动规分析中,关键是要理解和[动态规划:300.最长递增子序列](https://programmercarl.com/0300.最长上升子序列.html)的区别。

**要联动起来,才能理解递增子序列怎么求,递增连续子序列又要怎么求**

Expand Down
2 changes: 1 addition & 1 deletion problems/0685.冗余连接II.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

# 685.冗余连接II

题目地址:https://leetcode-cn.com/problems/redundant-connection-ii/
[力扣题目链接](https://leetcode-cn.com/problems/redundant-connection-ii/)

在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。

Expand Down
8 changes: 4 additions & 4 deletions problems/0700.二叉搜索树中的搜索.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 700.二叉搜索树中的搜索

题目地址:https://leetcode-cn.com/problems/search-in-a-binary-search-tree/
[力扣题目地址](https://leetcode-cn.com/problems/search-in-a-binary-search-tree/)

给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。

Expand All @@ -23,7 +23,7 @@

之前我们讲了都是普通二叉树,那么接下来看看二叉搜索树。

[关于二叉树,你该了解这些!](https://mp.weixin.qq.com/s/_ymfWYvTNd2GvWvC5HOE4A)中,我们已经讲过了二叉搜索树。
[关于二叉树,你该了解这些!](https://programmercarl.com/二叉树理论基础.html)中,我们已经讲过了二叉搜索树。

二叉搜索树是一个有序树:

Expand Down Expand Up @@ -73,7 +73,7 @@ return NULL;

这里可能会疑惑,在递归遍历的时候,什么时候直接return 递归函数的返回值,什么时候不用加这个 return呢。

我们在[二叉树:递归函数究竟什么时候需要返回值,什么时候不要返回值?](https://mp.weixin.qq.com/s/6TWAVjxQ34kVqROWgcRFOg)中讲了,如果要搜索一条边,递归函数就要加返回值,这里也是一样的道理。
我们在[二叉树:递归函数究竟什么时候需要返回值,什么时候不要返回值?](https://programmercarl.com/0112.路径总和.html)中讲了,如果要搜索一条边,递归函数就要加返回值,这里也是一样的道理。

**因为搜索到目标节点了,就要立即return了,这样才是找到节点就返回(搜索某一条边),如果不加return,就是遍历整棵树了。**

Expand Down Expand Up @@ -327,7 +327,7 @@ var searchBST = function (root, val) {
return searchBST(root.right, val);
return null;
};
```
```

> 迭代
Expand Down
6 changes: 3 additions & 3 deletions problems/0701.二叉搜索树中的插入操作.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 701.二叉搜索树中的插入操作

链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/
[力扣题目链接](https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/)

给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。

Expand Down Expand Up @@ -164,11 +164,11 @@ public:

## 迭代

再来看看迭代法,对二叉搜索树迭代写法不熟悉,可以看这篇:[二叉树:二叉搜索树登场!](https://mp.weixin.qq.com/s/vsKrWRlETxCVsiRr8v_hHg)
再来看看迭代法,对二叉搜索树迭代写法不熟悉,可以看这篇:[二叉树:二叉搜索树登场!](https://programmercarl.com/0700.二叉搜索树中的搜索.html)

在迭代法遍历的过程中,需要记录一下当前遍历的节点的父节点,这样才能做插入节点的操作。

[二叉树:搜索树的最小绝对差](https://mp.weixin.qq.com/s/Hwzml6698uP3qQCC1ctUQQ)[二叉树:我的众数是多少?](https://mp.weixin.qq.com/s/KSAr6OVQIMC-uZ8MEAnGHg)中,都是用了记录pre和cur两个指针的技巧,本题也是一样的。
[二叉树:搜索树的最小绝对差](https://programmercarl.com/0530.二叉搜索树的最小绝对差.html)[二叉树:我的众数是多少?](https://programmercarl.com/0501.二叉搜索树中的众数.html)中,都是用了记录pre和cur两个指针的技巧,本题也是一样的。

代码如下:

Expand Down
4 changes: 2 additions & 2 deletions problems/0704.二分查找.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 704. 二分查找

题目链接:https://leetcode-cn.com/problems/binary-search/
[力扣题目链接](https://leetcode-cn.com/problems/binary-search/)

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

Expand Down Expand Up @@ -139,7 +139,7 @@ public:

## 相关题目推荐

* [35.搜索插入位置](./0035.搜索插入位置.md)
* [35.搜索插入位置](https://programmercarl.com/0035.搜索插入位置.html)
* 34.在排序数组中查找元素的第一个和最后一个位置
* 69.x 的平方根
* 367.有效的完全平方数
Expand Down
6 changes: 3 additions & 3 deletions problems/0707.设计链表.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# 707.设计链表

https://leetcode-cn.com/problems/design-linked-list/
[力扣题目链接](https://leetcode-cn.com/problems/design-linked-list/)

题意:

Expand All @@ -28,9 +28,9 @@ https://leetcode-cn.com/problems/design-linked-list/

# 思路

如果对链表的基础知识还不太懂,可以看这篇文章:[关于链表,你该了解这些!](https://mp.weixin.qq.com/s/fDGMmLrW7ZHlzkzlf_dZkw)
如果对链表的基础知识还不太懂,可以看这篇文章:[关于链表,你该了解这些!](https://programmercarl.com/链表理论基础.html)

如果对链表的虚拟头结点不清楚,可以看这篇文章:[链表:听说用虚拟头节点会方便很多?](https://mp.weixin.qq.com/s/L5aanfALdLEwVWGvyXPDqA)
如果对链表的虚拟头结点不清楚,可以看这篇文章:[链表:听说用虚拟头节点会方便很多?](https://programmercarl.com/0203.移除链表元素.html)

删除链表节点:
![链表-删除节点](https://img-blog.csdnimg.cn/20200806195114541.png)
Expand Down
8 changes: 4 additions & 4 deletions problems/0714.买卖股票的最佳时机含手续费.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 714. 买卖股票的最佳时机含手续费

题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/
[力扣题目链接](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/)

给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。

Expand Down Expand Up @@ -37,11 +37,11 @@

## 思路

本题相对于[贪心算法:122.买卖股票的最佳时机II](https://mp.weixin.qq.com/s/VsTFA6U96l18Wntjcg3fcg),多添加了一个条件就是手续费。
本题相对于[贪心算法:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html),多添加了一个条件就是手续费。

## 贪心算法

[贪心算法:122.买卖股票的最佳时机II](https://mp.weixin.qq.com/s/VsTFA6U96l18Wntjcg3fcg)中使用贪心策略不用关心具体什么时候买卖,只要收集每天的正利润,最后稳稳的就是最大利润了。
[贪心算法:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html)中使用贪心策略不用关心具体什么时候买卖,只要收集每天的正利润,最后稳稳的就是最大利润了。

而本题有了手续费,就要关系什么时候买卖了,因为计算所获得利润,需要考虑买卖利润可能不足以手续费的情况。

Expand Down Expand Up @@ -97,7 +97,7 @@ public:

我在公众号「代码随想录」里将在下一个系列详细讲解动态规划,所以本题解先给出我的C++代码(带详细注释),感兴趣的同学可以自己先学习一下。

相对于[贪心算法:122.买卖股票的最佳时机II](https://mp.weixin.qq.com/s/VsTFA6U96l18Wntjcg3fcg)的动态规划解法中,只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。
相对于[贪心算法:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html)的动态规划解法中,只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。

C++代码如下:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 714.买卖股票的最佳时机含手续费

题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/
[力扣题目链接](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/)

给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。

Expand Down Expand Up @@ -36,15 +36,15 @@

## 思路

在讲解贪心专题的时候,我们已经讲过本题了[贪心算法:买卖股票的最佳时机含手续费](https://mp.weixin.qq.com/s/olWrUuDEYw2Jx5rMeG7XAg)
在讲解贪心专题的时候,我们已经讲过本题了[贪心算法:买卖股票的最佳时机含手续费](https://programmercarl.com/0714.买卖股票的最佳时机含手续费.html)

使用贪心算法,的性能是:
* 时间复杂度:O(n)
* 空间复杂度:O(1)

那么我们再来看看是使用动规的方法如何解题。

相对于[动态规划:122.买卖股票的最佳时机II](https://mp.weixin.qq.com/s/d4TRWFuhaY83HPa6t5ZL-w),本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。
相对于[动态规划:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html),本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。

唯一差别在于递推公式部分,所以本篇也就不按照动规五部曲详细讲解了,主要讲解一下递推公式部分。

Expand All @@ -68,7 +68,7 @@ dp[i][1] 表示第i天不持有股票所得最多现金

所以:dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);

**本题和[动态规划:122.买卖股票的最佳时机II](https://mp.weixin.qq.com/s/d4TRWFuhaY83HPa6t5ZL-w)的区别就是这里需要多一个减去手续费的操作**
**本题和[动态规划:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html)的区别就是这里需要多一个减去手续费的操作**

以上分析完毕,C++代码如下:

Expand Down
2 changes: 1 addition & 1 deletion problems/0718.最长重复子数组.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 718. 最长重复子数组

题目链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/
[力扣题目链接](https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/)

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。

Expand Down
2 changes: 1 addition & 1 deletion problems/0738.单调递增的数字.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@


## 738.单调递增的数字
题目链接: https://leetcode-cn.com/problems/monotone-increasing-digits/
[力扣题目链接](https://leetcode-cn.com/problems/monotone-increasing-digits/)

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。

Expand Down
3 changes: 1 addition & 2 deletions problems/0739.每日温度.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@

# 739. 每日温度


https://leetcode-cn.com/problems/daily-temperatures/
[力扣题目链接](https://leetcode-cn.com/problems/daily-temperatures/)

请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

Expand Down
Loading

0 comments on commit 8c74868

Please sign in to comment.