Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 64d3b35

Browse files
update content
1 parent bd7ab10 commit 64d3b35

24 files changed

+52
-52
lines changed

‎动态规划系列/动态规划之博弈问题.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
这样推广之后就变成了一道难度比较高的动态规划问题了,力扣第 486 题「预测赢家」就是一道类似的问题:
3838

39-
![](https://labuladong.github.io/pictures/博弈问题/title.jpg)
39+
<Problemslug="predict-the-winner" />
4040

4141
函数签名如下:
4242

‎动态规划系列/动态规划设计:最长递增子序列.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ int lengthOfLIS(int[] nums) {
234234

235235
我们看一个经常出现在生活中的有趣问题,力扣第 354 题「俄罗斯套娃信封问题」,先看下题目:
236236

237-
![](https://labuladong.github.io/pictures/信封嵌套/title.png)
237+
<Problemslug="russian-doll-envelopes" />
238238

239239
**这道题目其实是最长递增子序列的一个变种,因为每次合法的嵌套是大的套小的,相当于在二维平面中找一个最长递增的子序列,其长度就是最多能嵌套的信封个数**
240240

‎动态规划系列/单词拼接.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
首先看下力扣第 139 题「单词拆分」:
4040

41-
![](https://labuladong.github.io/pictures/单词拆分/title.jpg)
41+
<Problemslug="word-break" />
4242

4343
函数签名如下:
4444

@@ -348,7 +348,7 @@ class Solution {
348348

349349
有了上一道题的铺垫,力扣第 140 题「单词拆分 II」就容易多了,先看下题目:
350350

351-
![](https://labuladong.github.io/pictures/单词拆分/title2.jpg)
351+
<Problemslug="word-break-ii" />
352352

353353
相较上一题,这道题不是单单问你 `s` 是否能被拼出,还要问你是怎么拼的,其实只要把之前的解法稍微改一改就可以解决这道题。
354354

‎动态规划系列/团灭股票问题.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ int maxProfit(vector<int>& prices) {
5454
5555
这 6 道题目是有共性的,我们只需要抽出来力扣第 188 题「买卖股票的最佳时机 IV」进行研究,因为这道题是最泛化的形式,其他的问题都是这个形式的简化,看下题目:
5656
57-
![](https://labuladong.github.io/pictures/股票问题/title.png)
57+
<Problem slug="best-time-to-buy-and-sell-stock-iv" />
5858
5959
第一题是只进行一次交易,相当于 `k = 1`;第二题是不限交易次数,相当于 `k = +infinity`(正无穷);第三题是只进行 2 次交易,相当于 `k = 2`;剩下两道也是不限次数,但是加了交易「冷冻期」和「手续费」的额外条件,其实就是第二题的变种,都很容易处理。
6060
@@ -181,7 +181,7 @@ dp[i][k][1] = max(dp[i-1][k][1], dp[i-1][k-1][0] - prices[i])
181181

182182
**第一题,先说力扣第 121 题「买卖股票的最佳时机」,相当于 `k = 1` 的情况**:
183183

184-
![](https://labuladong.github.io/pictures/股票问题/title1.png)
184+
<Problem slug="best-time-to-buy-and-sell-stock"/>
185185

186186
直接套状态转移方程,根据 base case,可以做一些化简:
187187

@@ -270,7 +270,7 @@ int maxProfit_k_1(int[] prices) {
270270

271271
**第二题,看一下力扣第 122 题「买卖股票的最佳时机 II」,也就是 `k` 为正无穷的情况**:
272272

273-
![](https://labuladong.github.io/pictures/股票问题/title2.png)
273+
<Problem slug="best-time-to-buy-and-sell-stock-ii"/>
274274

275275
题目还专门强调可以在同一天出售,但我觉得这个条件纯属多余,如果当天买当天卖,那利润当然就是 0,这不是和没有进行交易是一样的吗?这道题的特点在于没有给出交易总数 `k` 的限制,也就相当于 `k` 为正无穷。
276276

@@ -322,7 +322,7 @@ int maxProfit_k_inf(int[] prices) {
322322

323323
**第三题,看力扣第 309 题「最佳买卖股票时机含冷冻期」,也就是 `k` 为正无穷,但含有交易冷冻期的情况**:
324324

325-
![](https://labuladong.github.io/pictures/股票问题/title3.png)
325+
<Problem slug="best-time-to-buy-and-sell-stock-with-cooldown"/>
326326

327327
和上一道题一样的,只不过每次 `sell` 之后要等一天才能继续交易,只要把这个特点融入上一题的状态转移方程即可:
328328

@@ -381,7 +381,7 @@ int maxProfit_with_cool(int[] prices) {
381381

382382
**第四题,看力扣第 714 题「买卖股票的最佳时机含手续费」,也就是 `k` 为正无穷且考虑交易手续费的情况**:
383383

384-
![](https://labuladong.github.io/pictures/股票问题/title4.png)
384+
<Problem slug="best-time-to-buy-and-sell-stock-with-transaction-fee"/>
385385

386386
每次交易要支付手续费,只要把手续费从利润中减去即可,改写方程:
387387

@@ -435,7 +435,7 @@ int maxProfit_with_fee(int[] prices, int fee) {
435435

436436
**第五题,看力扣第 123 题「买卖股票的最佳时机 III」,也就是 `k = 2` 的情况**:
437437

438-
![](https://labuladong.github.io/pictures/股票问题/title5.png)
438+
<Problem slug="best-time-to-buy-and-sell-stock-iii"/>
439439

440440
`k = 2` 和前面题目的情况稍微不同,因为上面的情况都和 `k` 的关系不太大:要么 `k` 是正无穷,状态转移和 `k` 没关系了;要么 `k = 1`,跟 `k = 0` 这个 base case 挨得近,最后也没有存在感。
441441

@@ -547,7 +547,7 @@ int maxProfit_k_2(int[] prices) {
547547

548548
**第六题,看力扣第 188 题「买卖股票的最佳时机 IV」,即 `k` 可以是题目给定的任何数的情况**:
549549

550-
![](https://labuladong.github.io/pictures/股票问题/title.png)
550+
<Problem slug="best-time-to-buy-and-sell-stock-iv"/>
551551

552552
有了上一题 `k = 2` 的铺垫,这题应该和上一题的第一个解法没啥区别,你把上一题的 `k = 2` 换成题目输入的 `k` 就行了。
553553

‎动态规划系列/编辑距离.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
力扣第 72 题「编辑距离」就是这个问题,先看下题目:
3333

34-
![](https://labuladong.github.io/pictures/editDistance/title.png)
34+
<Problemslug="edit-distance" />
3535

3636
函数签名如下:
3737

‎数据结构系列/BST1.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ void traverse(TreeNode root) {
6464

6565
这是力扣第 230 题「二叉搜索树中第 K 小的元素」,看下题目:
6666

67-
![](https://labuladong.github.io/pictures/BST1/title.png)
67+
<Problemslug="kth-smallest-element-in-a-bst" />
6868

6969
这个需求很常见吧,一个直接的思路就是升序排序,然后找第 `k` 个元素呗。BST 的中序遍历其实就是升序排序的结果,找第 `k` 个元素肯定不是什么难事。
7070

@@ -152,7 +152,7 @@ class TreeNode {
152152

153153
力扣第 538 题和 1038 题都是这道题,完全一样,你可以把它们一块做掉。看下题目:
154154

155-
![](https://labuladong.github.io/pictures/BST1/title1.png)
155+
<Problemslug="convert-bst-to-greater-tree" />
156156

157157
题目应该不难理解,比如图中的节点 5,转化成累加树的话,比 5 大的节点有 6,7,8,加上 5 本身,所以累加树上这个节点的值应该是 5+6+7+8=26。
158158

‎数据结构系列/dijkstra算法.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ Dijkstra 算法的时间复杂度是多少?你去网上查,可能会告诉
503503

504504
第一题是力扣第 743 题「网络延迟时间」,题目如下:
505505

506-
![](https://labuladong.github.io/pictures/dijkstra/title1.jpg)
506+
<Problemslug="network-delay-time" />
507507

508508
函数签名如下:
509509

@@ -615,7 +615,7 @@ int[] dijkstra(int start, List<int[]>[] graph) {
615615

616616
感觉这道题完全没有难度,下面我们再看一道题目,力扣第 1631 题「最小体力消耗路径」:
617617

618-
![](https://labuladong.github.io/pictures/dijkstra/title2.jpg)
618+
<Problemslug="path-with-minimum-effort" />
619619

620620
函数签名如下:
621621

@@ -747,7 +747,7 @@ int minimumEffortPath(int[][] heights) {
747747

748748
最后看一道题吧,力扣第 1514 题「概率最大的路径」,看下题目:
749749

750-
![](https://labuladong.github.io/pictures/dijkstra/title3.jpg)
750+
<Problemslug="path-with-maximum-probability" />
751751

752752
函数签名如下:
753753

‎数据结构系列/二叉树系列1.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ TreeNode invertTree(TreeNode root) {
162162

163163
这是力扣第 116 题「填充每个二叉树节点的右侧指针」,看下题目:
164164

165-
![](https://labuladong.github.io/pictures/二叉树系列/title1.png)
165+
<Problemslug="populating-next-right-pointers-in-each-node" />
166166

167167
函数签名如下:
168168

@@ -255,7 +255,7 @@ void traverse(Node node1, Node node2) {
255255

256256
这是力扣第 114 题「将二叉树展开为链表」,看下题目:
257257

258-
![](https://labuladong.github.io/pictures/二叉树系列/title2.png)
258+
<Problemslug="flatten-binary-tree-to-linked-list" />
259259

260260
函数签名如下:
261261

‎数据结构系列/二叉树系列2.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252

5353
先来道简单的,这是力扣第 654 题「最大二叉树」,题目如下:
5454

55-
![](https://labuladong.github.io/pictures/二叉树系列2/title1.png)
55+
<Problemslug="maximum-binary-tree" />
5656

5757
函数签名如下:
5858

@@ -148,7 +148,7 @@ TreeNode build(int[] nums, int lo, int hi) {
148148

149149
力扣第 105 题「从前序和中序遍历序列构造二叉树」就是这道经典题目,面试笔试中常考:
150150

151-
![](https://labuladong.github.io/pictures/二叉树系列2/title3.png)
151+
<Problemslug="construct-binary-tree-from-preorder-and-inorder-traversal" />
152152

153153
函数签名如下:
154154

@@ -339,7 +339,7 @@ TreeNode build(int[] preorder, int preStart, int preEnd,
339339

340340
类似上一题,这次我们利用**后序****中序**遍历的结果数组来还原二叉树,这是力扣第 106 题「从后序和中序遍历序列构造二叉树」:
341341

342-
![](https://labuladong.github.io/pictures/二叉树系列2/title2.png)
342+
<Problemslug="construct-binary-tree-from-inorder-and-postorder-traversal" />
343343

344344
函数签名如下:
345345

‎数据结构系列/单调栈.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ int[] nextGreaterElement(int[] nums) {
7979

8080
单调栈的使用技巧差不多了,首先来一个简单的变形,力扣第 496 题「下一个更大元素 I」:
8181

82-
![](https://labuladong.github.io/pictures/单调栈/title.jpg)
82+
<Problemslug="next-greater-element-i" />
8383

8484
这道题给你输入两个数组 `nums1``nums2`,让你求 `nums1` 中的元素在 `nums2` 中的下一个更大元素,函数签名如下:
8585

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /