解題程序都放在Github中:(持續更新)
Github地址 :https://github.com/Worthy-Wang/LeetCode
刷題之前,用三分鐘看看下面的東西,相信我,會有幫助的
在進行Leetcode的訓練之前,應該掌握:
- 一種主流語言(如C++/Java等)
如果你不熟悉語言,可能你無法理解像sort
,merge
,bind
,這些STL庫函數在算法中的妙用 , 也無法理解vector
或是queue
這些容器庫的方便之處。 - 熟悉數據結構與算法
如果你不熟悉數據結構,那麼像二叉樹
,BST
,AVL
樹這些看似簡單的結構都會讓你頭疼很久;更不用說在圖論中出現的DFS
,BFS
,貪心算法
,動態規劃
等。
未掌握好以上兩點就刷Leetocde, 那麼你可能每一題都需要兩三個小時
才能完成。
做題套路
分專題
(Github中的專題分類)
這樣你才能更好的掌握某一類專題的套路,題是做不完的,但是專題可以做完!
做題方法:
一刷
十分鐘做不出來直接看答案,有些題的思路第一次真的想不到二刷
開始就需要自己做出來,因爲第一次你已經有印象了再接下來
的訓練中,保證能快速做出來,畢竟面試時間就一點每週
參加Leetocde周賽,保持手感
Github中的做題格式:(以118題爲例)
- 標明做題的
開始時間
與通過時間
這樣會讓你知道每做一道題花了多少時間
- 標明
時間複雜度
與空間複雜度
習慣之後你才能明白哪些算法效率高
題目:118. Pascal's Triangle
鏈接:https://leetcode-cn.com/problems/pascals-triangle/
begin: 9:42
end: 9:56
Time complexity: O(N^2)
Space complexity: O(1)
class Solution
{
public:
vector<vector<int>> generate(int numRows)
{
vector<vector<int>> ans;
for (int i = 0; i < numRows; i++)
{
vector<int> temp(i+1, 1);
ans.push_back(temp);
for (int j = 0; j <= i; j++)
if (i > 0 && j > 0 && j < i)
ans[i][j] = ans[i - 1][j - 1] + ans[i - 1][j];
}
return ans;
}
};
下面是Github中的專題分類方式:
- 專題一:數組(
Chapter1_Array
) - 專題二:鏈表(
Chapter2_list
) - 專題三:字符串(
Chapter3_String
) - 專題四:棧(
Chapter4_Stack
) - 專題五:樹(
Chapter5_Tree
) - 專題六:排序(
Chapter6_Sort
) - 專題七:查找(
Chapter7_Search
) - 專題八:暴力解法(
Chapter8_Violence
) - 專題九:BFS(
Chapter9_BFS
) - 專題十:DFS(
Chapter10_DFS
) - 專題十一:分治(
Chapter11_Paritition
) - 專題十二:貪心(
Chapter12_Greedy
) - 專題十三:動態規劃(
Chapter13_DP
) - 專題十四:圖(
Chapter14_Graph
) - 專題十五:不定類型(
Chapter15_Unspecific
)