原创 leetcode Course Schedule系列問題,拓補排序,有向無環圖

能進行拓補排序的圖必須是有向無環圖,直接用DFS判斷圖裏面是否存在環,即不能存在回邊,用兩個時鐘數組記錄每個節點的進入時鐘pre和返回時鐘post,回邊有這樣的特性,如果一條邊(u,v)是一條回邊,那麼pre(u)>pre(v),pos

原创 leetcode 214. Shortest Palindrome leetcode 5. Longest Palindromic Substring迴文串相關

leetcode 214. Shortest Palindrome 一看這道題第一反應就是先找出以str[0]爲起點的最長的迴文子串,然後,將這個迴文子串後面的子串反轉再拼接到前面。然後第一步,看看找最長迴文子串有哪些方法。 暴力搜索,

原创 leetcode 301. Remove Invalid Parentheses

題目大意 給定一個字符串,可能會包括’(‘,’)’,和其他字符,得到所有合理的記過,實際上也就是左右括號匹配問題。 例子: “()())()” -> [“()()()”, “(())()”] “(a)())()” -> [“

原创 leetcode 264. Ugly Number II

 參考博客:http://www.cnblogs.com/grandyang/p/4743837.html  根絕題目提示,無須每個整數都判斷一下是否是醜數,因爲大部分的數都不是醜數,  所以只關注那些醜數是如何遞歸構造的就可以

原创 leetcode 91. Decode Ways

DP:  用一維的table記錄,table[i]代表數至字符串第i個字符最多的decode ways,  所以table[i]是根據當前觀察的數字和table[i-1],table[i-2]的值決定的。  如果當前table[

原创 Combination Sum系列問題

這系列一共有四個問題 問題一:給出一個沒有重複數字的候選集C,給出一個和T,在候選集裏面找出所有和爲T的組合,C裏面的數字可以選擇無數次。(裏面的所有數字都是正整數) 問題二:給出一個可能有重複數字的候選集C,給出一個和T,在候選集裏面找

原创 leetcode 516. Longest Palindromic Subsequence

分兩個關係,如果s[i]==s[j],table[i][j] = table[i+1][j-1]+2,如果s[i] != s[j],table[i][j] = max(table[i+1][j],table[i][j-1]。 邊界條

原创 leetcode 99. Recover Binary Search Tree 二叉樹非遞歸遍歷,利用stack和morris遍歷

思路: 一開始覺得就按照二叉搜索樹的構造規則由上至下,遇到違反大小規則的節點就直接交換這三個數的值就好了,知道遇到bad case:[3,null,2,null,1],產出結果[2,null,1,null,3],發現這種貪心的策略不w

原创 leetcode 69. Sqrt(x)

簡單地試了一下二分法,也要注意精度的問題 class Solution { public: int mySqrt(int x) { int left = 0, right = x; while (l

原创 leetcode 23. Merge k Sorted Lists

 * 相當於歸併排序的歸併部分,參考講解:https://www.youtube.com/watch?v=6bvnZzwiKzs  有k個有序的鏈表,假設每個鏈表的長度爲n,將這k個鏈表合併成一個  有序鏈表。  一種方法是,直接

原创 leetcode 336. Palindrome Pairs

一開始的思路就是遍歷所有的pair,判斷這個pair拼接起來是不是迴文串,首先,還是拿例子說明 ["abcd", "dcba", "lls", "s", "sssll"] 答案:[[0, 1], [1, 0], [3, 2], [2, 4

原创 leetcode 75. Sort Colors

三值排序問題:用三個指針跟蹤  top_bottom:第三個分區的下界,這個指針往後都是第三個分區的值;  bottom_top:第一個分區的上界,這個指針往前都是第一個分區的值,這個指針和middle_top之間的都是第二個分區的

原创 leetcode 50. Pow(x, n)

將指數用以2爲底的冪代表,如14=8+4+2=1110,則x^14 = x^(8 + 4 + 2) = x ^ 8 * x ^ 4 * x ^ 2,使每一輪迭代的底數翻倍,檢查指數在當前迭代的指示值是否爲1,爲1的話說明結果有當前這個底數

原创 leetcode 310. Minimum Height Trees BFS,找無向連通圖的直徑

想要找到圖裏面的MHT,就要找出最長路徑,最長路徑的中點就是MHT的根,當最長路徑的樹節點個數是奇數的時候,MHT只有一棵,當最長路徑的樹節點個數是偶數的時候,MHT有兩棵。找出無向連通圖裏面的直徑,直徑的中點就是所求的根,找出直徑的方

原创 leetcode Contains Duplicate系列問題,哈希表,紅黑樹,二叉查找樹

首先第一題leetcode 217 contains duplicate是要在一組正整數裏面找出重複的那一個,可以構造一個哈希表來查找,也可以構造二叉查找樹來查找,哈希表查找的時間效率比二叉查找樹好,但是二叉查找樹的空間效率比哈希表好,都