原创 114. Flatten Binary Tree to Linked List
先序遍歷,用一個stack 來存儲節點。然後用一個dummyHead 來存儲頭結點。 class Solution { public: void flatten(TreeNode* root) { if(root
原创 105. 從前序與中序遍歷序列構造二叉樹
這道題按照下面的思路進行的。 直接複製思路: **C++**。首先要知道一個結論,前序/後序+中序序列可以唯一確定一棵二叉樹,所以自然而然可以用來建樹。 看一下前序和中序有什麼特點,前序1,2,4,7,3,5,6,8 ,中序4,7,2,1
原创 109. 有序鏈表轉換二叉搜索樹
找中點然後採用分治法。 class Solution { public: TreeNode* sortedListToBST(ListNode* head) { if(head == NULL) return NU
原创 120. 三角形最小路徑和
這個應該是一個典型的dp問題,用一個和輸入相同的二維數組進行到達此節點時的最小路徑。 注意兩個在每一行的邊界條件。以及row<=2時的處理,否則容易overflow. class Solution { public: int mi
原创 86. 分隔鏈表
就是用兩個head 一個是大,一個是小,然後分別制定,一定要將Big->next = NULL; 否則會形成循環列表,超出時間限制。 class Solution { public: ListNode* partition(Lis
原创 142. Linked List Cycle II
兩種解法,一種是通過hash將訪問過的存儲起來,當遇到環的時候,break; 另一種是快慢指針,floyd解法。 下面是hash_map解法: class Solution { public: ListNode *detectCy
原创 138. 複製帶隨機指針的鏈表
就是用回溯法。用一個hash_map來存儲訪問過的節點。 class Solution { private: unordered_map<Node*, Node*> all; public: Node* copyRando
原创 143. Reorder List
這個題有幾種解法,一個是用vector 存儲,O(n)空間複雜度,一個是直接在鏈表上操作,O(1)空間複雜度,但是操作複雜,涉及到鏈表中點查找,revserse 以及鏈表的merge,這樣一個題就複習了三個解法。 下面是O(1)的解法。
原创 236. Lowest Common Ancestor of a Binary Tree
採用分治法來求解: 如果找到任意一個node 則返回,這樣就可以分爲三種情況。兩個node 在左右子樹都找到,返回root. class Solution { public: TreeNode* lowestCommonAnce
原创 450. 刪除二叉搜索樹中的節點
主要是分三種情況,葉子節點,有左子樹,有右子樹。當時有個bug就是在尋找mode的時候是 root->left = deleteNode(root->left, key); 而不是 deleteNode(root->left, key)
原创 148. 排序鏈表
nlog 的算法,是歸併排序,同時是o1的空間複雜度,所以在merge的時候,直接在原鏈表上進行操作。在split的時候,由於包含head, 所以是走n-1步。 class Solution { public: ListNode*
原创 162. 尋找峯值
因爲題目是log n的時間複雜度,所以很容易想到二分查找。主要是看區間選擇的條件。注意 left = mid + 1 ; 不能是mid,否則死循環。 class Solution { public: int findPeakEle
原创 154. Find Minimum in Rotated Sorted Array II
和153的情況類似,主要是有相等重複的情況,需要將right-1 class Solution { public: int findMin(vector<int>& nums) { if(nums.size() =
原创 1046. Last Stone Weight
這裏就是用大頂堆。priority_queue 堆的定義:https://blog.csdn.net/lym940928/article/details/89635690 //構造一個空的優先隊列,此優先隊列是一個小頂堆 priorit
原创 200. 島嶼數量
參考標準解法,主要是用的DFS的解法。 這裏有個坑就是在更新i,j的時候,要用tmpi。 class Solution { private: vector<int> x{-1, 1, 0, 0}; vector<int>