File tree Expand file tree Collapse file tree 6 files changed +96
-2
lines changed Expand file tree Collapse file tree 6 files changed +96
-2
lines changed Original file line number Diff line number Diff line change 187
187
| [ 0037.解数独] ( https://github.com/youngyangyang04/leetcode/blob/master/problems/0037.解数独.md ) | 回溯 | 困难| ** 回溯** |
188
188
| [ 0039.组合总和] ( https://github.com/youngyangyang04/leetcode/blob/master/problems/0039.组合总和.md ) | 数组/回溯 | 中等| ** 回溯** |
189
189
| [ 0040.组合总和II] ( https://github.com/youngyangyang04/leetcode/blob/master/problems/0040.组合总和II.md ) | 数组/回溯 | 中等| ** 回溯** |
190
+ | [ 0042.接雨水] ( https://github.com/youngyangyang04/leetcode/blob/master/problems/0042.接雨水.md ) | 数组/栈/双指针 | 困难| ** 双指针** ** 单调栈** ** 动态规划** |
190
191
| [ 0046.全排列] ( https://github.com/youngyangyang04/leetcode/blob/master/problems/0046.全排列.md ) | 回溯| 中等| ** 回溯** |
191
192
| [ 0047.全排列II] ( https://github.com/youngyangyang04/leetcode/blob/master/problems/0047.全排列II.md ) | 回溯| 中等| ** 回溯** |
192
193
| [ 0051.N皇后] ( https://github.com/youngyangyang04/leetcode/blob/master/problems/0051.N皇后.md ) | 回溯| 困难| ** 回溯** |
Original file line number Diff line number Diff line change
1
+ # 题目链接
2
+
3
+ # 思路
4
+ // 只要一个柱子的
5
+ // 暴力的解法 都不好写啊
6
+ // 找左面最大的, 找右边最大的,找左右边际的时候容易迷糊。我已开始还找左大于右的。 (还不够)
7
+ // 每次记录单条,不要记录整个面积
8
+
9
+ # C++代码
10
+
11
+ 按照列来
12
+ ```
13
+ class Solution {
14
+ public:
15
+ int trap(vector<int>& height) {
16
+ int sum = 0;
17
+ // for (int i = 0; i < height.size(); i++) {
18
+ // cout << height[i] << " ";
19
+ // }
20
+ // cout << endl;
21
+ for (int i = 0; i < height.size(); i++) {
22
+ if (i == 0 || i == height.size() - 1) continue;
23
+
24
+ int lIndex, rIndex;
25
+ int rValue = height[i];
26
+ int lValue = height[i];
27
+ for (int r = i + 1; r < height.size(); r++) {
28
+ if (height[r] > rValue) {
29
+ rValue = height[r];
30
+ rIndex = r;
31
+ }
32
+ }
33
+ for (int l = i - 1; l >= 0; l--) {
34
+ if (height[l] > lValue) {
35
+ lValue = height[l];
36
+ lIndex = l;
37
+ }
38
+ }
39
+ int h = min(lValue, rValue) - height[i];
40
+ // 我为啥要算 (rIndex - lIndex + 1);就是按照行 按照列 区分不清啊
41
+ if (h > 0) sum += h;
42
+ }
43
+ return sum;
44
+ }
45
+ };
46
+ ```
Original file line number Diff line number Diff line change @@ -7,21 +7,26 @@ https://leetcode-cn.com/problems/permutations-ii/
7
7
8
8
这里就涉及到去重了。
9
9
10
+
10
11
要注意** 全排列是要取树的子节点的,如果是子集问题,就取树上的所有节点。**
11
12
12
13
很多同学在去重上想不明白,其实很多题解也没有讲清楚,反正代码是能过的,感觉是那么回事,稀里糊涂的先把题目过了。
13
14
14
15
这个去重为什么很难理解呢,** 所谓去重,其实就是使用过的元素不能重复选取。** 这么一说好像很简单!
15
16
17
+
16
18
但是什么又是“使用过”,我们把排列问题抽象为树形结构之后,** “使用过”在这个树形结构上是有两个维度的** ,一个维度是同一树枝上使用过,一个维度是同一树层上使用过。
17
19
20
+
18
21
** 没有理解这两个层面上的“使用过” 是造成大家没有彻底理解去重的根本原因。**
19
22
20
23
那么排列问题,既可以在 同一树层上的“使用过”来去重,也可以在同一树枝上的“使用过”来去重!
21
24
22
25
理解这一本质,很多疑点就迎刃而解了。
23
26
24
- 首先把示例中的 [ 1,1,2] ,抽象为一棵树,然后在同一树层上对nums[ i-1] 使用过的话,进行去重如图:
27
+ ** 还要强调的是去重一定要对元素经行排序,这样我们才方便通过相邻的节点来判断是否重复使用了。**
28
+
29
+ 首先把示例中的 [ 1,1,2] (为了方便举例,已经排序),抽象为一棵树,然后在同一树层上对nums[ i-1] 使用过的话,进行去重如图:
25
30
26
31
<img src =' ../pics/47.全排列II1.png ' width =600 > </img ></div >
27
32
Original file line number Diff line number Diff line change @@ -32,6 +32,8 @@ https://leetcode-cn.com/problems/subsets-ii/
32
32
33
33
所以要明确我们要去重的是同一树层上的“使用过”。
34
34
35
+ ** 还要强调的是去重一定要对元素经行排序,这样我们才方便通过相邻的节点来判断是否重复使用了。**
36
+
35
37
用示例中的[ 1, 2, 2] 来举例,如图所示:
36
38
37
39
<img src =' ../pics/90.子集II.png ' width =600 > </img ></div >
Original file line number Diff line number Diff line change
1
+
2
+ 二叉树的基础概念
3
+
4
+ 结点的度:一个结点拥有子树的数目称为结点的度
5
+
6
+ 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树
7
+
8
+ 满二叉树:深度为k,有2^k-1个节点的二叉树
9
+
10
+ 如图:
11
+ <img src =' https://img-blog.csdnimg.cn/20200806185805576.png ' width =600 > </img ></div >
12
+
13
+ 因为在面试中,面试官会说明给出的二叉树,是一科什么样的二叉树,所以大家有必要了解 最基本的二叉树的类型,这样才能和面试官有效沟通。 如果面试官说给出一个完全二叉树,此时候选人不太清楚完全二叉树是什么样的树的话,就会比较麻烦了,如果这种最基础的概念没有弄清,会让面试官对候选人的印象大打折扣。
14
+
15
+ 所以基本的概念我们要清楚,这样才能在沟通的过程中 表现出扎实的基本功。 对于二叉树,相信左子树,右子树,父节点,叶子节点,二叉树深度等等这些大家都知道了,我这里单独介绍一下(click) 节点的度:一个结点拥有子树的数目称为结点的度。这个概念在我们介绍二叉树的时候经常用到,一些同学在面试中 描述叶子节点,会说 没有左右孩子的节点,这就显得不够专业, 叶子节点 我们称之为 度为0的节点。
16
+
17
+ 那么我们再来介绍几种常见的二叉树类型,(click)什么是满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树, (click)也可以说深度为k,有2^k-1个节点的二叉树
18
+ (click ) 也就是如图所示的树称之为满二叉树。
19
+
20
+
21
+ 什么是完全二叉树?
22
+
23
+ 叶结点只能出现在最底层的两层,且最底层叶结点均处于次底层叶结点的左侧
24
+
25
+
26
+
27
+ 那么什么是完全二叉树呢, 很多同学经常把 完全二叉树 和 满二叉树 混在一起。
28
+
29
+ (click)来看一下什么是 完全二叉树,叶结点只能出现在最底层的两层,且最底层叶结点均处于次底层叶结点的左侧。也就是最底层的叶子节点 要从左到右来,中间不能断 ,这么说有点抽象,我们来看图
30
+ 例如
31
+ (click) 所以是完全二叉树(click)
32
+ (click) 所以也是完全二叉树(click)
33
+ (click) 所以不是完全二叉树(click)
34
+
35
+ 那么满二叉树是不是完全二叉树呢,答案是:这个当然是了
Original file line number Diff line number Diff line change 8
8
* 解数独
9
9
10
10
11
+ * 讲一讲去重为什么要排序。
12
+
13
+
14
+ 491 . 递增子序列
15
+
11
16
12
17
# 单层递归
13
18
14
19
# 双层递归
15
20
16
21
17
- # 组合 子集问题,used[ i-1] = false 来去重复, 啥问题 used[ i-1] = true也是可以的来着
22
+ # 组合 子集问题,used[ i-1] = false 来去重复, 啥问题 used[ i-1] = true也是可以的来着 排列问题
You can’t perform that action at this time.
0 commit comments