File tree 1 file changed +24
-9
lines changed
1 file changed +24
-9
lines changed Original file line number Diff line number Diff line change @@ -7,7 +7,7 @@ Author: 小鹿
7
7
8
8
9
9
10
- #### 题目:Merge K Sorted Lists
10
+ ## 题目:Merge K Sorted Lists
11
11
12
12
Merge * k* sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
13
13
@@ -27,9 +27,9 @@ Output: 1->1->2->3->4->4->5->6
27
27
28
28
29
29
30
- #### Solve:
30
+ ## Solve:
31
31
32
- ###### ▉ 算法思路
32
+ #### ▉ 算法思路
33
33
34
34
> 如果我们完成了简单的基于两个单链表的合并之后,对于这个题来说,考察点是分治算法,我认为还有一个考察点就是递归调用,分治的同时经常用递归来解决。
35
35
>
@@ -39,7 +39,7 @@ Output: 1->1->2->3->4->4->5->6
39
39
40
40
41
41
42
- ###### ▉ 代码实现
42
+ #### ▉ 代码实现
43
43
44
44
``` javascript
45
45
/**
@@ -97,17 +97,32 @@ var mergeTwoLists = function(l1, l2) {
97
97
98
98
99
99
100
+ #### ▉ 扩展:分治算法
101
+
102
+ > 分治算法经常和递归一块使用,所谓分治算法,顾名思义,分而治之,最基本的分之算法在归并排序、快速排序都有用到。也就是将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。
103
+
104
+
105
+
106
+ ##### 1、分治算法递归每层操作
107
+
108
+ - 分解:将原问题分解成一系列的子问题。
109
+ - 解决:递归地求解各个子问题,若子问题足够小,则直接求解;
110
+ - 合并:将子问题的结果合并成原问题。
111
+
112
+
113
+
114
+ ##### 2、分治算法满足的条件
115
+
116
+ - ** 可分解:** 原问题与分解成的小问题具有相同的模式;
117
+ - ** 无关联:** 原问题分解成的子问题可以独立求解,子问题之间没有相关性,这一点是分治算法跟动态规划的明显区别。
118
+ - ** 终止条件:** 具有分解终止条件;
119
+ - ** 合并不能太复杂:** 可以将子问题合并成原问题,而这个合并操作的复杂度不能太高,否则就起不到减小算法总体复杂度的效果了。
100
120
101
121
102
- ###### ▉ 扩展:递归
103
122
104
- >
105
- >
106
123
107
124
108
125
109
126
110
127
111
- ###### ▉ 扩展:分治算法
112
128
113
- >
You can’t perform that action at this time.
0 commit comments