File tree 1 file changed +14
-9
lines changed
1 file changed +14
-9
lines changed Original file line number Diff line number Diff line change @@ -170,13 +170,18 @@ LeetCode 是一个非常棒的 OJ(Online Judge)平台,收集了许多公
170
170
171
171
我们知道,除了数据结构,具体算法在一个程序中也是十分重要的,而算法效率的度量则是时间复杂度和空间复杂度。通常情况下,人们更关注时间复杂度,往往希望找到比 O( n^2 ) 快的算法,在数据量比较大的情况下,算法时间复杂度最好是O(logn)或者O(n)。计算机学科中经典的算法思想就那么多,LeetCode 上面的题目涵盖了其中大部分,下面大致来看下。
172
172
173
- ** 分而治之** :有点类似“大事化小、小事化了”的思想,经典的归并排序和快速排序都用到这种思想,可以看看 Search a 2D Matrix II 来理解这种思想。
174
- ** 动态规划** :有点类似数学中的归纳总结法,找出状态转移方程,然后逐步求解。 309. Best Time to Buy and Sell Stock with Cooldown 是理解动态规划的一个不错的例子。
175
- ** 贪心算法** :有时候只顾局部利益,最终也会有最好的全局收益。 122. Best Time to Buy and Sell Stock II 看看该如何“贪心”。
176
- ** 搜索算法** ( 深度优先 , 广度优先 , 二分搜索 ):在有限的解空间中找出满足条件的解,深度和广度通常比较费时间,二分搜索每次可以将问题规模缩小一半,所以比较高效。
177
- ** 回溯** :不断地去试错,同时要注意回头是岸,走不通就换条路,最终也能找到解决问题方法或者知道问题无解,可以看看 131. Palindrome Partitioning 。
178
-
179
- 当然,还有一部分问题可能需要一些 数学知识 去解决,或者是需要一些 位运算的技巧 去快速解决。总之,我们希望找到时间复杂度低的解决方法。为了达到这个目的,我们可能需要在一个解题方法中融合多种思想,比如在 300. Longest Increasing Subsequence 中同时用到了动态规划和二分查找的方法,将复杂度控制在 O(nlogn)。如果用其他方法,时间复杂度可能会高很多,这种题目的运行时间统计图也比较有意思,可以看到不同解决方案运行时间的巨大差异,如下:
173
+ #### ** 分而治之**
174
+ 有点类似“大事化小、小事化了”的思想,经典的归并排序和快速排序都用到这种思想,可以看看 Search a 2D Matrix II 来理解这种思想。
175
+ #### ** 动态规划**
176
+ 有点类似数学中的归纳总结法,找出状态转移方程,然后逐步求解。 309. Best Time to Buy and Sell Stock with Cooldown 是理解动态规划的一个不错的例子。
177
+ #### ** 贪心算法**
178
+ 有时候只顾局部利益,最终也会有最好的全局收益。 122. Best Time to Buy and Sell Stock II 看看该如何“贪心”。
179
+ #### ** 搜索算法** ( 深度优先 , 广度优先 , 二分搜索 )
180
+ 在有限的解空间中找出满足条件的解,深度和广度通常比较费时间,二分搜索每次可以将问题规模缩小一半,所以比较高效。
181
+ #### ** 回溯**
182
+ 不断地去试错,同时要注意回头是岸,走不通就换条路,最终也能找到解决问题方法或者知道问题无解,可以看看 131. Palindrome Partitioning 。
183
+ #### 数学知识
184
+ 当然,还有一部分问题可能需要一些 数学知识 去解决,或者是需要一些 位运算的技巧 去快速解决。总之,我们希望找到时间复杂度低的解决方法。为了达到这个目的,我们可能需要在一个解题方法中融合多种思想,比如在 300. Longest Increasing Subsequence 中同时用到了动态规划和二分查找的方法,将复杂度控制在 O(nlogn)。如果用其他方法,时间复杂度可能会高很多,这种题目的运行时间统计图也比较有意思,可以看到不同解决方案运行时间的巨大差异,如下:
180
185
181
186
182
187
当然有时候我们会牺牲空间换取时间,比如在动态规划中状态的保存,或者是记忆化搜索,避免在递归中计算重复子问题。 213. House Robber II 的 一个Discuss 会教我们如何用记忆化搜索减少程序执行时间。
@@ -274,8 +279,8 @@ StefanPochmann 也不厌其烦地给出了自己的答案:
274
279
<h4>常用标签</h4>
275
280
<center>
276
281

277
- </br>
278
- ## 已完成题目列表
282
+
283
+ <h2> 已完成题目列表</h2>
279
284
280
285
|ID|Tags|Solution|
281
286
|--|----|--------|
You can’t perform that action at this time.
0 commit comments