天天看點

求中位數中回文數之和C語言,leetcode刷題總結1-50

1. 兩數之和

描述:nums = [2, 7, 11, 15], target = 9       傳回[0, 1]

思路:雙指針,一個從前,一個從後。(數組必須排序)

2. 兩數相加

描述:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

思路:通過最低位開始和進位(init:0)相加。時間複雜度O(max(m,n))

3. 無重複字元的最長字串

描述:

輸入: "abcabcbb"

輸出: 3

解釋: 因為無重複字元的最長子串是 "abc",是以其長度為 3。

思路: 快指針和慢指針,hashmap結構

4. 尋找兩個正序數組的中位數。(放棄)

描述:

nums1 = [1, 2]

nums2 = [3, 4]

則中位數是 (2 + 3)/2 = 2.5

思路:轉換為找第i個小的數,分别找兩個數組的i/2個小的數,比較邊界,動态變換兩個切點的位置。

5. 最長回文子串

描述:

輸入: "babad"

輸出: "bab"

注意: "aba" 也是一個有效答案。

思路:動态規劃。定義狀态變量dp[i][j]為子串i~j是否為回文。dp[i][j]=dp[i+1][j-1] AND i==j?

6. Z字形變換

描述:

輸入: s = "LEETCODEISHIRING", numRows = 4

輸出: "LDREOEIIECIHNTSG"

解釋:

L           D         R

E     O  E      I   I

E C       I  H      N

T          S          G

思路: 定義numRows數組,來一個字元放入,(放入的時候按照一定規律)

7. 正數反轉

描述:123=>321    -123=> -321    120=>21

思路: 通過相除取餘10,不斷計算累加。

8. 字元串轉換整數

描述: "42"->42    ;     "      -42"->"-42"  ;    "words and 987" => "" ;  "4193 with words"=>"4193"

思路: 自動機判斷即可

9. 回文數

描述:

輸入: 121

輸出: true

思路:轉變為字元串比較;

10.正規表達式比對

描述: 一定規則的正則比對

思路: 動态規劃

求中位數中回文數之和C語言,leetcode刷題總結1-50

11. 裝最多水的容器。

描述:

輸入:[1,8,6,2,5,4,8,3,7]

輸出:49

求中位數中回文數之和C語言,leetcode刷題總結1-50

思路:雙指針,一個開始,一個尾,開始計算靠緊。

12. 整數轉羅馬數字

描述:

輸入: 1994

輸出: "MCMXCIV"

解釋: M = 1000, CM = 900, XC = 90, IV = 4.

思路:不斷與對應的羅馬數字相減。存儲映射關系。

13. 羅馬數字轉整數:

描述:

輸入: "MCMXCIV"

輸出: 1994

解釋: M = 1000, CM = 900, XC = 90, IV = 4.

思路:計算累加。注意V與VI

14. 最長公共字首

描述:

輸入: ["flower","flow","flight"]

輸出: "fl"

輸入: ["dog","racecar","car"]

輸出: ""

思路:比較即可。

15 . 三數之和

描述:

給定數組 nums = [-1, 0, 1, 2, -1, -4],  target=0

滿足要求的三元組集合為:

[

[-1, 0, 1],

[-1, -1, 2]

]

思路: 排序  +  先固定第一個指針,然後雙指針從第二個位置和尾指針周遊。

16. 最接近的三數之和

類比  三數之和

17. 電話号碼的字母組合

描述:

求中位數中回文數之和C語言,leetcode刷題總結1-50

輸入:"23"

輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

思路: 回溯+深度優先

18. 四數之和

類比 三數之和   n^3

19. 删除連結清單的倒數第N個節點

描述;

給定一個連結清單: 1->2->3->4->5, 和 n = 2.

當删除了倒數第二個節點後,連結清單變為 1->2->3->5.

思路:時間複雜度)(n),設兩個指針,都從頭開始,第二個指針和第一個距離保持n的長度,當第二個為Null,證明已經到尾了,那麼第一個就在被删除節點的前一個。

20. 有效的括号

描述:

輸入: "()[]{}"

輸出: true

思路: 棧

21. 合并兩個有序連結清單

描述:

輸入:1->2->4, 1->3->4

輸出:1->1->2->3->4->4

思路:合并即可

22. 括号生成

描述:

輸入:n = 3

輸出:[

"((()))",

"(()())",

"(())()",

"()(())",

"()()()"

]

思路: 回溯

23 合并K個排序連結清單

描述:

輸入:

[

1->4->5,

1->3->4,

2->6

]

輸出: 1->1->2->3->4->4->5->6

思路:歸并,每2個采用   “ 21. 合并兩個有序連結清單”

24. 兩兩交換連結清單中的節點

描述:給定 1->2->3->4, 傳回 2->1->4->3.

思路:類比下一題

25. K個一組交換

描述:

給你這個連結清單:1->2->3->4->5

當 k = 2 時,應當傳回: 2->1->4->3->5

當 k = 3 時,應當傳回: 3->2->1->4->5

思路:

采用3個指針,一個指head,一個慢慢往後走,另一個是第二個的後一個,逐漸往後修改。到K個後,修改head和end,即end為下一個遞歸的head

26. 删除排序數組中的重複項

描述:

給定數組 nums = [1,1,2],

函數應該傳回新的長度 2, 并且原數組 nums 的前兩個元素被修改為 1, 2。

思路:快指針慢指針。

27. 移除元素

描述:

給定 nums = [3,2,2,3], val = 3,

函數應該傳回新的長度 2, 并且 nums 中的前兩個元素均為 2。

思路:快指針慢指針

28. 實作Strstr()

描述:

輸入: haystack = "hello", needle = "ll"

輸出: 2

思路:KMP (next數組)

29. 兩數相除

描述:

輸入: dividend = 10, divisor = 3

輸出: 3

解釋: 10/3 = truncate(3.33333..) = truncate(3) = 3

思路:被除數翻倍,10能除過3,那麼除6,否則再除12....當除不過的時候再去這個區間劃分。

30. 串聯所有單詞的子串

描述:

輸入:

s = "barfoothefoobarman",

words = ["foo","bar"]

輸出:[0,9]

思路:先把words的單詞和個數放入hashmap,然後通過s的視窗滑動完成搜。(視窗的長度與words字元個數相同,視窗也采用hashmap的統計方式)

31. 下一個排列:

描述:

1,2,3 → 1,3,2

3,2,1 → 1,2,3

1,1,5 → 1,5,1

思路:從大到小排序;從後往前找突然變小的,然後交換此數字和後面比他大的最小的。然後将那個突然變小的後面倒序。(1576432)->将5和6交換(1675432)倒序75432->1623457

32. 最長有效括号:

描述:

輸入: "(()"

輸出: 2

解釋: 最長有效括号子串為 "()"

思路:棧

33. 搜尋旋轉排序數組

描述:

輸入: nums = [4,5,6,7,0,1,2], target = 0

輸出: 4

思路:二分查找。看那一半的兩邊是否遞增。

34. 在排序數組中查找元素的第一個和最後一個位置

描述:

輸入: nums = [5,7,7,8,8,10], target = 8

輸出: [3,4]

思路: 二分

35. 搜尋插入位置

描述:

輸入: [1,3,5,6], 5

輸出: 2

思路:二分

36. 有效的數獨

描述:

數字 1-9 在每一行隻能出現一次。

數字 1-9 在每一列隻能出現一次。

數字 1-9 在每一個以粗實線分隔的 3x3 宮内隻能出現一次。

求中位數中回文數之和C語言,leetcode刷題總結1-50

輸出: true

思路: 從上到下,從左到右,三維數組(第一個是原數組的行,第二個是原數組的列,第三個是所屬的Block,檢測目前block是否已存在已存在的)

37. 解數獨

描述:

數字 1-9 在每一行隻能出現一次。

數字 1-9 在每一列隻能出現一次。

數字 1-9 在每一個以粗實線分隔的 3x3 宮内隻能出現一次。

求中位數中回文數之和C語言,leetcode刷題總結1-50
求中位數中回文數之和C語言,leetcode刷題總結1-50

思路: 回溯(現在[0][2]放1,然後從左往右,發現失敗回溯)

38. 外觀數組。。。。略

39. 組合總和

描述:(允許重複)

輸入: candidates = [2,3,5], target = 8,

所求解集為:

[

[2,2,2,2],

[2,3,3],

[3,5]

]

思路:回溯

40 .組合總和 II

描述:(不允許重複)

candidates = [2,5,2,1,2], target = 5,

所求解集為:

[

[1,2,2],

[5]

]

思路:回溯

41. 缺失的第一個正數

描述:

輸入: [3,4,-1,1]

輸出: 2

思路:創立一個長度為n的數組,周遊一遍,将負數和0扔掉,若目前正數小于n,放在第i位,若大于n,也丢棄。那麼這個數組從頭到尾周遊即可。

42. 接雨水

描述:

求中位數中回文數之和C語言,leetcode刷題總結1-50

思路:棧(當遇到比目前的相等或者高,那麼就可以計算累加了)

43 . 字元串相乘

描述:

輸入: num1 = "123", num2 = "456"

輸出: "56088

思路:普通的乘法。(“3”-“0”=3)

44.通配符比對

描述:

輸入:

s = "cb"

p = "?a"

輸出: false

思路: 通過回溯即可;動态規劃,設定狀态變量dp[i][j]字元串前i個與模式前j個是否比對。

45. 跳躍遊戲2

描述:

輸入: [2,3,1,1,4]

輸出: 2

解釋: 跳到最後一個位置的最小跳躍數是 2。

思路: 動态規劃。初始第一個為2,那麼将dp[1],dp[2]設為1.第二個為3,那麼dp[2]=min(dp[2],dp[1]+1)

46. 全排列

描述:

輸入: [1,2,3]

輸出:

[

[1,2,3],

[1,3,2],

[2,1,3],

[2,3,1],

[3,1,2],

[3,2,1]

]

思路:遞歸

47. 全排列 II

描述:(允許輸入的數組中有重複,但是保證輸出不能有重複)

輸入: [1,1,2]

輸出:

[

[1,1,2],

[1,2,1],

[2,1,1]

]

思路:回溯+剪枝

48. 圖像旋轉

描述:

輸入

[

[1,2,3],

[4,5,6],

[7,8,9]

],

輸出

[

[7,4,1],

[8,5,2],

[9,6,3]

]

思路:找規律,1,3,9,7進行變換,然後2,6,8,4...

49. 字母異位詞分組

描述:

輸入: ["eat", "tea", "tan", "ate", "nat", "bat"]

輸出:

[

["ate","eat","tea"],

["nat","tan"],

["bat"]

]

思路: hashmap>

50. pow(x,n)

描述: x的n次方

思路:不斷進行n的除以2的操作,進行x*x或者x*x*y的遞歸操作