重刷leetcode

https://zhuanlan.zhihu.com/p/386929820
我打算按照上面的方式重新刷题,之前的不算了,毕竟经常出现刷了一段时间就忘了。
代码我也打算全部重新写,并更新代码的完成情况。其它基础知识还没想好怎么处理,毕竟我虽然干了快三年,但是并没有学到啥东西,果然海康的产品开发就是测试和技术支持,layman都能干。
绿色不需要看,可能一次过,可能重看也没必要,红色为一定要看,蓝色为读一下就行,不需要重新做
有些代码会重做,有个式子,如果是0+1就说明对了0次,错了1次,肯定就是只写了一次

1.两数之和:哈希表,注意key是值,value才是index。
2.两数相加:和归并的merge基本一致,差别就是当两个链表均到头的时候,进位可能还是存在的,此时要注意加一次。
3.无重复字符的最长子串:用哈希记录是否重复,滑动窗口更新区域最大小值(编码小细节错误)
4.寻找两个正序数组的中位数:找到两个数组的分割线,注意扣边界和给好初始值。
5.最长回文子串:找到最长回文右边界,判断i的边界和这个边界的关系
6.Z字型变换:非常典型的宏观分解问题,要用到额外的空间复杂度
7.整数变换:注意整数转为string用to_string
8.字符串转换整数 (atoi)注意find_first_of那四个函数的使用方法
9.回文数:毫无难度
10.正则表达式匹配:这道题绿色不是因为很简单,而是因为很麻烦,没意义,虽然也是几乎一次过。直接字符串匹配不行的,因为,忘了因为啥了,反正递归减少字符串长度,因此DP也行
11. 盛最多水的容器:头尾双指针向中间移动,时时更新最大值
12整数转罗马数字:对100、10分别取余,字符串添加
13罗马数字转整数:根据字符添加int
14最长公共前缀:字典树
15三数之和:不要额外空间复杂度,时间复杂度是 O ( n 2 ) O(n^2) O(n2)
16.最接近的三数之和:贼简单,和15题一样
17. 电话号码的字母组合:简单的全排列,递归就行
18.四数之和:不重复的数组是怎么实现的, O ( n 3 ) O(n^3) On3,没有有有额外空间复杂度
19. 删除链表的倒数第 N 个结点:非常简单的快慢指针
20.有效的括号:类似单调栈,一次过
21. 合并两个有序链表:链表的归并merge
22生成括号:递归做成即可,注意不可以出现右括号多于左括号的情况。
23合并K个升序链表:多一个堆,找出所有链表中最小的节点
24. 两两交换链表中的节点:交换节点,提前一位就OK
25.K个一组反转链表:这道题难度不高,但是很考验编码能力,考得很全面,写写吧
26.删除有序数组中的重复项:贼简单
27.移除元素:贼简单,和26一样
28. 实现 strStr():KMP竟然是简单
29.两数相除:快速幂问题,和50是一对
30. 串联所有单词的子串:很简单,别想复杂了, O ( n 2 ) O(n^2) O(n2)的复杂度
31. 下一个排列: O ( n ) O(n) O(n)多试几个数字找规律就行了
32. 最长有效括号 O ( n ) O(n) O(n) 1+1
33.搜索旋转排序数组1+0算法思想不难,也是一次过,但是编程过程贼艰辛。
34.在排序数组中查找元素两次二分而已
35.搜索插入位置简单的二分
45.跳跃游戏 II:dp复杂度为 O ( n 2 ) O(n^2) O(n2),再用贪心将复杂度降到 O ( n ) O(n) O(n),for每个节点的所有值,选择这个节点的下个节点能走的最远地方。
50.pow(x,n):快速幂问题,29的变种
215.第K大的数:先partition,后根据第k大的数这个k进行分割。bfprt很简单,就是将全部的数分割为N份,每份有5个数,取出这N个数组的中位数组成新的数组继续分割,最终剩下的数当做哨兵
414.第三大的数:看215即可

猜你喜欢

转载自blog.csdn.net/qigezuishuaide/article/details/120587549