Skip to content

Commit 8d1b15d

Browse files
authored
Merge branch 'youngyangyang04:master' into master
2 parents 63d7af5 + 61c3670 commit 8d1b15d

16 files changed

+208
-128
lines changed

problems/0122.买卖股票的最佳时机II.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,21 @@ var maxProfit = function(prices) {
229229
};
230230
```
231231

232+
C:
233+
```c
234+
int maxProfit(int* prices, int pricesSize){
235+
int result = 0;
236+
int i;
237+
//从第二个元素开始遍历数组,与之前的元素进行比较
238+
for(i = 1; i < pricesSize; ++i) {
239+
//若该元素比前面元素大,则说明有利润。代表买入
240+
if(prices[i] > prices[i-1])
241+
result+= prices[i]-prices[i-1];
242+
}
243+
return result;
244+
}
245+
```
246+
232247
-----------------------
233248
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
234249
* B站视频:[代码随想录](https://space.bilibili.com/525438321)

problems/0704.二分查找.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ func search(nums: [Int], target: Int) -> Int {
374374
} else if target > nums[middle] {
375375
// 当目标在区间右侧,就需要更新左边的边界值,新区间为[middle + 1, right]
376376
left = middle + 1
377-
} else {
377+
} else {
378378
// 当目标就是在中间,则返回中间值的下标
379379
return middle
380380
}
@@ -450,6 +450,33 @@ impl Solution {
450450
}
451451
```
452452

453+
**C:**
454+
```c
455+
int search(int* nums, int numsSize, int target){
456+
int left = 0;
457+
int right = numsSize-1;
458+
int middle = 0;
459+
//若left小于等于right,说明区间中元素不为0
460+
while(left<=right) {
461+
//更新查找下标middle的值
462+
middle = (left+right)/2;
463+
//此时target可能会在[left,middle-1]区间中
464+
if(nums[middle] > target) {
465+
right = middle-1;
466+
}
467+
//此时target可能会在[middle+1,right]区间中
468+
else if(nums[middle] < target) {
469+
left = middle+1;
470+
}
471+
//当前下标元素等于target值时,返回middle
472+
else if(nums[middle] == target){
473+
return middle;
474+
}
475+
}
476+
//若未找到target元素,返回-1
477+
return -1;
478+
}
479+
```
453480
454481
-----------------------
455482
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)

problems/0968.监控二叉树.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,45 @@ var minCameraCover = function(root) {
406406
};
407407
```
408408

409+
C:
410+
```c
411+
/*
412+
**函数后序遍历二叉树。判断一个结点状态时,根据其左右孩子结点的状态进行判断
413+
**状态:0为没有被摄像头覆盖到。1为此结点处应设置摄像头。2为此结点已被摄像头覆盖
414+
*/
415+
int traversal(struct TreeNode* node, int* ans) {
416+
//递归结束条件:传入结点为NULL,假设此结点能被摄像头覆盖。这样方便与对叶子结点的判断,将叶子结点设为0
417+
if(!node)
418+
return 2;
419+
//后序遍历二叉树,记录左右孩子的状态。根据左右孩子状态更新结点自身状态
420+
int left = traversal(node->left, ans);
421+
int right = traversal(node->right, ans);
422+
423+
//若左右孩子都可以被摄像头覆盖,将父亲结点状态设为0
424+
if(left == 2 && right == 2) {
425+
return 0;
426+
}
427+
//若左右孩子有一个结点状态为没有被覆盖(0),则将父亲结点状态设置为摄像头
428+
if(left == 0 || right == 0) {
429+
(*ans)++;
430+
return 1;
431+
}
432+
//若左右孩子有一个为摄像头,证明父亲结点可以被覆盖。将父亲结点状态变为2
433+
if(left == 1 || right == 1)
434+
return 2;
435+
//逻辑不会走到-1,语句不会执行
436+
return -1;
437+
}
438+
439+
int minCameraCover(struct TreeNode* root){
440+
int ans = 0;
441+
442+
//在对整个二叉树遍历后。头结点可能未被覆盖,这时候如果函数返回值为0,证明头结点未被覆盖。说明头结点也需要添置摄像头,ans++
443+
if(traversal(root, &ans) == 0)
444+
ans++;
445+
return ans;
446+
}
447+
```
409448
410449
-----------------------
411450
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)

problems/周总结/20200927二叉树周末总结.md

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

88
## 周一
99

10-
本周我们开始讲解了二叉树,在[关于二叉树,你该了解这些!](https://mp.weixin.qq.com/s/_ymfWYvTNd2GvWvC5HOE4A)中讲解了二叉树的理论基础。
10+
本周我们开始讲解了二叉树,在[关于二叉树,你该了解这些!](https://programmercarl.com/二叉树理论基础.html)中讲解了二叉树的理论基础。
1111

1212
有同学会把红黑树和二叉平衡搜索树弄分开了,其实红黑树就是一种二叉平衡搜索树,这两个树不是独立的,所以C++中map、multimap、set、multiset的底层实现机制是二叉平衡搜索树,再具体一点是红黑树。
1313

@@ -48,17 +48,17 @@ morris遍历是二叉树遍历算法的超强进阶算法,morris遍历可以
4848

4949
## 周二
5050

51-
[二叉树:一入递归深似海,从此offer是路人](https://mp.weixin.qq.com/s/PwVIfxDlT3kRgMASWAMGhA)中讲到了递归三要素,以及前中后序的递归写法。
51+
[二叉树:一入递归深似海,从此offer是路人](https://programmercarl.com/二叉树的递归遍历.html)中讲到了递归三要素,以及前中后序的递归写法。
5252

53-
文章中我给出了leetcode上三道二叉树的前中后序题目,但是看完[二叉树:一入递归深似海,从此offer是路人](https://mp.weixin.qq.com/s/PwVIfxDlT3kRgMASWAMGhA),依然可以解决n叉树的前后序遍历,在leetcode上分别是
53+
文章中我给出了leetcode上三道二叉树的前中后序题目,但是看完[二叉树:一入递归深似海,从此offer是路人](https://programmercarl.com/二叉树的递归遍历.html),依然可以解决n叉树的前后序遍历,在leetcode上分别是
5454
* 589. N叉树的前序遍历
5555
* 590. N叉树的后序遍历
5656

5757
大家可以再去把这两道题目做了。
5858

5959
## 周三
6060

61-
[二叉树:听说递归能做的,栈也能做!](https://mp.weixin.qq.com/s/c_zCrGHIVlBjUH_hJtghCg)中我们开始用栈来实现递归的写法,也就是所谓的迭代法。
61+
[二叉树:听说递归能做的,栈也能做!](https://programmercarl.com/二叉树的迭代遍历.html)中我们开始用栈来实现递归的写法,也就是所谓的迭代法。
6262

6363
细心的同学发现文中前后序遍历空节点是否入栈写法是不同的
6464

@@ -121,7 +121,7 @@ public:
121121

122122
## 周四
123123

124-
[二叉树:前中后序迭代方式的写法就不能统一一下么?](https://mp.weixin.qq.com/s/WKg0Ty1_3SZkztpHubZPRg)中我们使用空节点作为标记,给出了统一的前中后序迭代法。
124+
[二叉树:前中后序迭代方式的写法就不能统一一下么?](https://programmercarl.com/二叉树的统一迭代法.html)中我们使用空节点作为标记,给出了统一的前中后序迭代法。
125125

126126
此时又多了一种前中后序的迭代写法,那么有同学问了:前中后序迭代法是不是一定要统一来写,这样才算是规范。
127127

@@ -131,7 +131,7 @@ public:
131131

132132
## 周五
133133

134-
[二叉树:层序遍历登场!](https://mp.weixin.qq.com/s/Gb3BjakIKGNpup2jYtTzog)中我们介绍了二叉树的另一种遍历方式(图论中广度优先搜索在二叉树上的应用)即:层序遍历。
134+
[二叉树:层序遍历登场!](https://programmercarl.com/0102.二叉树的层序遍历.html)中我们介绍了二叉树的另一种遍历方式(图论中广度优先搜索在二叉树上的应用)即:层序遍历。
135135

136136
看完这篇文章,去leetcode上怒刷五题,文章中 编号107题目的样例图放错了(原谅我匆忙之间总是手抖),但不影响大家理解。
137137

@@ -141,7 +141,7 @@ public:
141141

142142
## 周六
143143

144-
[二叉树:你真的会翻转二叉树么?](https://mp.weixin.qq.com/s/6gY1MiXrnm-khAAJiIb5Bg)中我们把翻转二叉树这么一道简单又经典的问题,充分的剖析了一波,相信就算做过这道题目的同学,看完本篇之后依然有所收获!
144+
[二叉树:你真的会翻转二叉树么?](https://programmercarl.com/0226.翻转二叉树.html)中我们把翻转二叉树这么一道简单又经典的问题,充分的剖析了一波,相信就算做过这道题目的同学,看完本篇之后依然有所收获!
145145

146146

147147
**文中我指的是递归的中序遍历是不行的,因为使用递归的中序遍历,某些节点的左右孩子会翻转两次。**

problems/周总结/20201003二叉树周末总结.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
## 周一
99

10-
本周刚开始我们讲解了判断二叉树是否对称的写法, [二叉树:我对称么?](https://mp.weixin.qq.com/s/Kgf0gjvlDlNDfKIH2b1Oxg)
10+
本周刚开始我们讲解了判断二叉树是否对称的写法, [二叉树:我对称么?](https://programmercarl.com/0101.对称二叉树.html)
1111

1212
这道题目的本质是要比较两个树(这两个树是根节点的左右子树),遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中。
1313

@@ -17,7 +17,7 @@
1717
* 100.相同的树
1818
* 572.另一个树的子树
1919

20-
**[二叉树:我对称么?](https://mp.weixin.qq.com/s/Kgf0gjvlDlNDfKIH2b1Oxg)中的递归法和迭代法只需要稍作修改其中一个树的遍历顺序,便可刷了100.相同的树。**
20+
**[二叉树:我对称么?](https://programmercarl.com/0101.对称二叉树.html)中的递归法和迭代法只需要稍作修改其中一个树的遍历顺序,便可刷了100.相同的树。**
2121

2222
100.相同的树的递归代码如下:
2323

@@ -102,11 +102,11 @@ public:
102102

103103
## 周二
104104

105-
[二叉树:看看这些树的最大深度](https://mp.weixin.qq.com/s/guKwV-gSNbA1CcbvkMtHBg)中,我们讲解了如何求二叉树的最大深度。
105+
[二叉树:看看这些树的最大深度](https://programmercarl.com/0104.二叉树的最大深度.html)中,我们讲解了如何求二叉树的最大深度。
106106

107107
本题可以使用前序,也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序呢求的是高度。
108108

109-
**而根节点的高度就是二叉树的最大深度**,所以本题中我们通过后序求的根节点高度来求的二叉树最大深度,所以[二叉树:看看这些树的最大深度](https://mp.weixin.qq.com/s/guKwV-gSNbA1CcbvkMtHBg)中使用的是后序遍历。
109+
**而根节点的高度就是二叉树的最大深度**,所以本题中我们通过后序求的根节点高度来求的二叉树最大深度,所以[二叉树:看看这些树的最大深度](https://programmercarl.com/0104.二叉树的最大深度.html)中使用的是后序遍历。
110110

111111
本题当然也可以使用前序,代码如下:(**充分表现出求深度回溯的过程**)
112112
```CPP
@@ -169,27 +169,27 @@ public:
169169
170170
## 周三
171171
172-
在[二叉树:看看这些树的最小深度](https://mp.weixin.qq.com/s/BH8-gPC3_QlqICDg7rGSGA)中,我们讲解如何求二叉树的最小深度, 这道题目要是稍不留心很容易犯错。
172+
在[二叉树:看看这些树的最小深度](https://programmercarl.com/0111.二叉树的最小深度.html)中,我们讲解如何求二叉树的最小深度, 这道题目要是稍不留心很容易犯错。
173173
174174
**注意这里最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意是叶子节点。**
175175
176176
什么是叶子节点,左右孩子都为空的节点才是叶子节点!
177177
178178
**求二叉树的最小深度和求二叉树的最大深度的差别主要在于处理左右孩子不为空的逻辑。**
179179
180-
注意到这一点之后 递归法和迭代法 都可以参照[二叉树:看看这些树的最大深度](https://mp.weixin.qq.com/s/guKwV-gSNbA1CcbvkMtHBg)写出来。
180+
注意到这一点之后 递归法和迭代法 都可以参照[二叉树:看看这些树的最大深度](https://programmercarl.com/0104.二叉树的最大深度.html)写出来。
181181
182182
## 周四
183183
184-
我们在[二叉树:我有多少个节点?](https://mp.weixin.qq.com/s/2_eAjzw-D0va9y4RJgSmXw)中,讲解了如何求二叉树的节点数量。
184+
我们在[二叉树:我有多少个节点?](https://programmercarl.com/0222.完全二叉树的节点个数.html)中,讲解了如何求二叉树的节点数量。
185185
186-
这一天是十一长假的第一天,又是双节,所以简单一些,只要把之前两篇[二叉树:看看这些树的最大深度](https://mp.weixin.qq.com/s/guKwV-gSNbA1CcbvkMtHBg), [二叉树:看看这些树的最小深度](https://mp.weixin.qq.com/s/BH8-gPC3_QlqICDg7rGSGA)都认真看了的话,这道题目可以分分钟刷掉了。
186+
这一天是十一长假的第一天,又是双节,所以简单一些,只要把之前两篇[二叉树:看看这些树的最大深度](https://programmercarl.com/0104.二叉树的最大深度.html), [二叉树:看看这些树的最小深度](https://programmercarl.com/0111.二叉树的最小深度.html)都认真看了的话,这道题目可以分分钟刷掉了。
187187
188188
估计此时大家对这一类求二叉树节点数量以及求深度应该非常熟练了。
189189
190190
## 周五
191191
192-
在[二叉树:我平衡么?](https://mp.weixin.qq.com/s/isUS-0HDYknmC0Rr4R8mww)中讲解了如何判断二叉树是否是平衡二叉树
192+
在[二叉树:我平衡么?](https://programmercarl.com/0110.平衡二叉树.html)中讲解了如何判断二叉树是否是平衡二叉树
193193
194194
今天讲解一道判断平衡二叉树的题目,其实 方法上我们之前讲解深度的时候都讲过了,但是这次我们通过这道题目彻底搞清楚二叉树高度与深度的问题,以及对应的遍历方式。
195195
@@ -212,7 +212,7 @@ public:
212212
213213
## 周六
214214
215-
在[二叉树:找我的所有路径?](https://mp.weixin.qq.com/s/Osw4LQD2xVUnCJ-9jrYxJA)中正式涉及到了回溯,很多同学过了这道题目,可能都不知道自己使用了回溯,其实回溯和递归都是相伴相生的。最后我依然给出了迭代法的版本。
215+
在[二叉树:找我的所有路径?](https://programmercarl.com/0257.二叉树的所有路径.html)中正式涉及到了回溯,很多同学过了这道题目,可能都不知道自己使用了回溯,其实回溯和递归都是相伴相生的。最后我依然给出了迭代法的版本。
216216
217217
我在题解中第一个版本的代码会把回溯的过程充分体现出来,如果大家直接看简洁的代码版本,很可能就会忽略的回溯的存在。
218218

0 commit comments

Comments
 (0)