原创 leet-code-105. 從前序與中序遍歷序列構造二叉樹 and leet-code-106 從中序與後序遍歷序列構造二叉樹

leet-code-105. 從前序與中序遍歷序列構造二叉樹: class Solution { private: int search(int *inorder,int len,int target){ fo

原创 設計模式之單例模式(懶漢、餓漢)

懶漢式單例模式:不到萬不得已就不會去實例化類,也就是說在第一次用到類實例的時候纔會去實例化。 餓漢式單例模式:單例模式定義的時候就開始初始化。   1.加鎖的懶漢式(線程安全) #include<mutex> class Single

原创 生產者與消費者模型

typedef struct node{ struce node* next; int val; }Node; Node* head=NULL;//頭結點初始化爲空 pthread_mutex_t mutex; p

原创 leetcode-946 驗證棧序列

思路:用一個棧去模擬出入棧的過程        比如,當前pushed={1,2,3,4,5},popped={4,5,3,2,1}時,藉助一個額外的棧s,置i=0,j=0(i指向pushed,j指向popped); popped[j]=

原创 leetcode-416. 分割等和子集

class Solution { bool search(vector<int>& nums, int idx, int target, vector<vector<pair<int, bool>>> &dp) { if (i

原创 leetcode-297. 二叉樹的序列化與反序列化

      思路:通過前序、後續、或者層次遍歷二叉樹,用一個字符串保存節點的值,要注意的是,每個節點的值之後要添加一個特殊符號(比如下劃線)分隔,否則可能無法區分節點的值。       比如一個節點的值可能是12,不加下劃線的話,反序列化

原创 劍指offer-鏈表的入環節點

//方法一:使用set,空間複雜度爲O(N) class Solution { public: ListNode* EntryNodeOfLoop(ListNode* pHead) { if(pHead=

原创 leetcode-206-反轉鏈表1

//方法一:空間複雜度o(N)的方法 class Solution { public: ListNode* reverseList(ListNode* head) { if(head==NULL||head->n

原创 leetcode-129. 求根到葉子節點數字之和

思路:用一個字符串記錄節點的值,每次將節點的值添加到字符串的最後,當訪問到葉子節點時,將路徑和計入sum. 回溯時,彈出最後的一個字符值即可。 /** * Definition for a binary tree node. * s

原创 leetcode-199. 二叉樹的右視圖

思路:打印每一層的最後一個節點即可。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *lef

原创 leetcode-198. 打家劫舍

class Solution { public: int rob(vector<int>& nums) { if(nums.empty()) return 0; if(1=

原创 leetcode-515. 在每個樹行中找最大值-c++

    一開始沒有考慮每層中會出現負數的情況,之後把負無窮取爲 -0x3f3f3f3f,以爲已經足夠小了。結果有個測試用例居然是這樣的: ......  最後老老實實換成INT_MIN吧。 思路: 樹的層次遍歷,也就是圖的BFS,更新每

原创 leetcode-529-掃雷遊戲-c++

思路:點開一個格子時,判斷當前格子是不是雷,是雷的話,把該格子改爲'X',然後直接返回。若當前格子不是雷,則先統計周圍有幾個雷,如果旁邊一個雷都沒有,把當前格子改爲'B',並遞歸的搜索其他八個方向的格子。如果旁邊有雷,則把當前格子改爲雷的

原创 leetcode-695-島嶼的最大面積

給定一個包含了一些 0 和 1的非空二維數組 grid , 一個 島嶼 是由四個方向 (水平或垂直) 的 1 (代表土地) 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍着。 找到給定的二維數組中最大的島嶼面積。(如果沒有島嶼,則返回

原创 leetcode-559. N叉樹的最大深度(兩種解法)-c++

方法一:dfs(類似於求二叉樹的高度) class Solution { public: int maxDepth(Node* root) { if(root==NULL) return