求中位数中回文数之和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.正则表达式匹配

描述: 一定规则的正则匹配

思路: 动态规划

e8ded4f082af1b7ee025b4cc02af0e60.png

11. 装最多水的容器。

描述:

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

输出:49

2fe854bece633bfa48fb30e3f93de3cd.png

思路:双指针,一个开始,一个尾,开始计算靠紧。

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. 电话号码的字母组合

描述:

3ff7947d72c4c10871ed8b5dd3a3b5b6.png

输入:"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 宫内只能出现一次。

e43696a0a4959eb2081e62b16455c0bb.png

输出: true

思路: 从上到下,从左到右,三维数组(第一个是原数组的行,第二个是原数组的列,第三个是所属的Block,检测当前block是否已存在已存在的)

37. 解数独

描述:

数字 1-9 在每一行只能出现一次。

数字 1-9 在每一列只能出现一次。

数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

dee43deadb3867c25dbaa54000c4cf36.png 

073dcfa03dfa20b34bd478d54750894c.png

思路: 回溯(现在[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. 接雨水

描述:

660655a906a55d7ecfb8d71c9731e4c3.png

思路:栈(当遇到比当前的相等或者高,那么就可以计算累加了)

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的递归操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值