Skip to content

Commit 6baf02d

Browse files
authoredJun 26, 2017
Update README.md
1 parent 0d52f5d commit 6baf02d

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed
 

‎README.md

+14-9
Original file line numberDiff line numberDiff line change
@@ -170,13 +170,18 @@ LeetCode 是一个非常棒的 OJ(Online Judge)平台,收集了许多公
170170

171171
我们知道,除了数据结构,具体算法在一个程序中也是十分重要的,而算法效率的度量则是时间复杂度和空间复杂度。通常情况下,人们更关注时间复杂度,往往希望找到比 O( n^2 ) 快的算法,在数据量比较大的情况下,算法时间复杂度最好是O(logn)或者O(n)。计算机学科中经典的算法思想就那么多,LeetCode 上面的题目涵盖了其中大部分,下面大致来看下。
172172

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)。如果用其他方法,时间复杂度可能会高很多,这种题目的运行时间统计图也比较有意思,可以看到不同解决方案运行时间的巨大差异,如下:
180185

181186

182187
当然有时候我们会牺牲空间换取时间,比如在动态规划中状态的保存,或者是记忆化搜索,避免在递归中计算重复子问题。 213. House Robber II 的 一个Discuss 会教我们如何用记忆化搜索减少程序执行时间。
@@ -274,8 +279,8 @@ StefanPochmann 也不厌其烦地给出了自己的答案:
274279
<h4>常用标签</h4>
275280
<center>
276281
![这里写图片描述](http://img.blog.csdn.net/20170610204936185?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFpZ3VhbHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
277-
</br>
278-
## 已完成题目列表
282+
283+
<h2>已完成题目列表</h2>
279284
280285
|ID|Tags|Solution|
281286
|--|----|--------|

0 commit comments

Comments
 (0)