原创 43.二叉樹的最近公共祖先

題目描述:代碼實現:遞歸法,對左右子樹分別遞歸,找到p,q後返回,若left,right同時找到pq,就返回根節點,如果只有left和right其中一個找到,就返回他們本身。/** * Definition for a binary tr

原创 42.格林編碼

題目描述:代碼實現:應用格林編碼的公式,使用位運算的方式,將i右移一位並與原來的i做異或運算即得到結果。時間複雜度:O(2^n)/** * @param {number} n * @return {number[]} */vargra

原创 41.子集

題目描述:代碼實現:迭代法,首先初始化res爲一個二維數組,包括一個[],在迭代的過程中,依次找含有nums[0],nums[1]…的子集,與前面的子集拼接,得到新的子集。時間複雜度:O(N×2^N)值得注意的是,這裏必須聲明一個變量len

原创 31.恢復二叉搜索樹

題目描述:代碼實現:還不是很懂時間複雜度:O(n)/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; *

原创 30.整數反轉

題目描述:代碼實現:思路很簡單,關鍵在於對於邊界值的處理時間複雜度:O(log(x))/** * @param {number} x * @return {number} */varreverse=function(x){varrev

原创 33.判斷子序列

題目描述:代碼實現:雙指針法,快指針在t中遍歷,給s一個慢指針flag,如果s[flag] === t[i],慢指針就向後移,並判斷flag是否等於s的長度,如果最後等於長度,則爲true,否則,爲false。時間複雜度:O(n)/**

原创 32.設計循環雙端隊列

題目描述:代碼實現:利用數組實現/** * Initialize your data structure here. Set the size of the deque to be k. * @param {number} k */v

原创 25.對稱二叉樹

題目描述:代碼實現:遞歸法,遍歷樹,判斷左右節點是否相等即可。時間複雜度:O(n)/** * Definition for a binary tree node. * function TreeNode(val) { * th

原创 21.無重複字符的最長子串

題目描述:給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。示例 1:輸入:"abcabcbb"輸出:3解釋:因爲無重複字符的最長子串是"abc",所以其長度爲3。代碼實現:學會了一種新的解題方法,滑動窗口,感覺思想挺簡單的,

原创 22.最長迴文子串

題目描述:給定一個字符串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度爲 1000。示例 1:輸入:"babad"輸出:"bab"注意:"aba"也是一個有效答案。代碼實現:中心擴展法,每個迴文數都可以以一箇中心擴展,兩端的數

原创 19.最長公共前綴

題目描述:編寫一個函數來查找字符串數組中的最長公共前綴。如果不存在公共前綴,返回空字符串 “”。示例 1:輸入:["flower","flow","flight"]輸出:"fl"代碼實現:/** * @param {string[]} s

原创 18. 羅馬數字轉整數

題目描述:羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。字符 數值I1V5X10L50C100D500M1000例如, 羅馬數字 2 寫做 II ,即爲兩個並列的 1。12 寫做 XII ,即爲 X +

原创 16.刪除鏈表中的倒數第N個節點

題目描述:給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。示例:給定一個鏈表:1->2->3->4->5,和 n=2.當刪除了倒數第二個節點後,鏈表變爲1->2->3->5.代碼實現:常規方法,第一次遍歷找到鏈表的長度,第

原创 13.合併兩個有序鏈表

題目描述:將兩個有序鏈表合併爲一個新的有序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。示例:輸入:1->2->4,1->3->4輸出:1->1->2->3->4->4代碼實現:JavaScript遞歸法,好久沒做過遞歸的題了

原创 12.買賣股票的最佳時機Ⅲ

題目描述:給定一個數組,它的第 i 個元素是一支給定的股票在第 i 天的價格。設計一個算法來計算你所能獲取的最大利潤。你最多可以完成 兩筆 交易。注意: 你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。示例 1:輸入:[3,3