Leetcode刷题记录(同步更新)

Leetcode刷题记录(同步更新)

一、前期必备

1、数据结构

一维:

  • 基础:数组 array (string), 链表 linked list
  • 高级:栈 stack, 队列 queue, 双端队列 deque, 集合 set, 映射 map (hash or map), etc

二维:

  • 基础:树 tree, 图 graph
  • 高级:二叉搜索树 binary search tree (red-black tree, AVL), 堆 heap, 并查集 disjoint set, 字典树 Trie, etc

特殊:

  • 位运算 Bitwise, 布隆过滤器 BloomFilter
  • LRU Cache
2、算法
  • If-else, switch —> branch
  • for, while loop —> Iteration
  • 递归 Recursion (Divide & Conquer, Backtrace)
  • 搜索 Search: 深度优先搜索 Depth fifirst search, 广度优先搜索 Breadth fifirst search, A*, etc
  • 动态规划 Dynamic Programming
  • 二分查找 Binary Search
  • 贪心 Greedy
  • 数学 Math , 几何 Geometry

注意:在头脑中回忆上面每种算法的思想和代码模板

3、刻意练习
  • 工欲善其事,必先利其器基本功是区别业余和职业选手的根本。
  • 基础动作的分解训练反复练习,例如乒乓球,台球,滑雪运动员。
  • 算法学习的最大误区是一道题只刷一遍。
  • 刻意练习 — 过遍数(五毒神掌)
    • 练习缺陷、弱点地方
    • 不舒服、不爽、枯燥
4、反馈

1)即时反馈

2)主动型反馈(自己去找)

  • 高手代码 (GitHub, LeetCode, etc.)
  • 第一视角直播

3)被动式反馈(高手给你指点)

  • code review
  • 教练看你打,给你反馈
5、刷题要求

1)刷题第一遍

  • 5分钟:读题 + 思考
  • 如果会,别纠结算法优劣,先用最笨的方法求解
  • 如果不会,直接看解法:注意!多解法,比较解法优劣
  • 背诵、默写好的解法
  • 记住:不要纠结、不需要抢救

2)刷题第二遍

  • 马上自己写 —> LeetCode 提交
  • 多种解法比较、体会 —> 优化!

3)刷题第三遍

  • 过了一天后,再重复做题
  • 不同解法的熟练程度 —> 专项练习

4)刷题第四遍

  • 过了一周:反复回来练习相同题目

二、按题型整理

1、数学,几何
7. 整数反转https://leetcode-cn.com/problems/reverse-integer/easy
9.回文数https://leetcode-cn.com/problems/palindrome-number/easy
13.罗马数字转整数https://leetcode-cn.com/problems/roman-to-integer/easy
84.柱状图中最大的矩形https://leetcode-cn.com/problems/largest-rectangle-in-histogram/hard
42. 接雨水https://leetcode-cn.com/problems/trapping-rain-water/hard
441. 排列硬币https://leetcode-cn.com/problems/arranging-coins/easy
836. 矩形重叠https://leetcode-cn.com/problems/rectangle-overlap/easy
892.三维形体的表面积https://leetcode-cn.com/problems/surface-area-of-3d-shapeseasy
2、线性表:数组与链表
1.两数之和https://leetcode-cn.com/problems/two-sum/easy
26.删除排序数组中的重复项https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/easy
189.旋转数组https://leetcode-cn.com/problems/rotate-array/easy
21.合并两个有序链表https://leetcode-cn.com/problems/merge-two-sorted-lists/easy
24.两两交换链表中的节点https://leetcode-cn.com/problems/swap-nodes-in-pairs/medium
15.三数之和https://leetcode-cn.com/problems/3sum/medium
4.寻找两个有序数组的中位数https://leetcode-cn.com/problems/median-of-two-sorted-arrays/hard
16.最接近的三数之和https://leetcode-cn.com/problems/3sum-closest/medium
18.四数之和https://leetcode-cn.com/problems/4sum/medium
27.移除元素https://leetcode-cn.com/problems/remove-element/easy
3、字符串
242. 有效的字母异位词https://leetcode-cn.com/problems/valid-anagram/easy
49.字母异位词分组https://leetcode-cn.com/problems/group-anagrams/medium
14.最长公共前缀https://leetcode-cn.com/problems/longest-common-prefix/easy
28. 实现 strStr()https://leetcode-cn.com/problems/implement-strstr/easy
1047.删除字符串中的所有相邻重复项https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/easy
面试题 01.06. 字符串压缩https://leetcode-cn.com/problems/compress-string-lcci/easy
1160.拼写单词https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters/easy
4、栈与队列
20.有效的括号https://leetcode-cn.com/problems/valid-parentheseseasy
1047.删除字符串中的所有相邻重复项https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/easy
1021. 删除最外层的括号https://leetcode-cn.com/problems/remove-outermost-parentheses/easy
84.柱状图中最大的矩形https://leetcode-cn.com/problems/largest-rectangle-in-histogram/hard
5、树
111. 二叉树的最小深度https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/easy
236. 二叉树的最近公共祖先https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/medium
101. 对称二叉树https://leetcode-cn.com/problems/symmetric-tree/easy
104. 二叉树的最大深度https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/easy
662. 二叉树最大宽度https://leetcode-cn.com/problems/maximum-width-of-binary-tree/medium
783. 二叉搜索树节点最小距离https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/easy
257. 二叉树的所有路径https://leetcode-cn.com/problems/binary-tree-paths/easy
938. 二叉搜索树的范围和https://leetcode-cn.com/problems/range-sum-of-bst/easy
6、图
200. 岛屿数量https://leetcode-cn.com/problems/number-of-islands/medium
695.岛屿的最大面积https://leetcode-cn.com/problems/max-area-of-island/medium
365. 水壶问题https://leetcode-cn.com/problems/water-and-jug-problem/medium
7、搜索
35. 搜索插入位置https://leetcode-cn.com/problems/search-insert-position/easy
8、动态规划
300. 最长上升子序列https://leetcode-cn.com/problems/longest-increasing-subsequence/medium

三、按日期整理

2019-12

2019.12.28

1,两数之和(用hashmap需要保证输出结果{i,j} ,I < j)
2,删除排序数组中的重复项(注意数组是有序的,比较相邻两个数即可)
3,旋转数组(用链表最好有头节点)
4,合并两个有序链表(最好有头节点和尾指针)

2019.12.30
1,两两交换链表中的节点(增加一个头指针,设置pre,p,r三指针进行调整)
2,三数之和(先排序,再二分查找,勉强通过;注意多种剪枝优化(当前最大最小值,排序后i的值是否大于0);最好的方法是结合快排的思想,以0为界,前后移动left,right双指针,注意对i,left的去重)


2020-1

2020.1.1
1,寻找两个有序数组的中位数(要求的时间复杂度为O(log(m+n)),不是O(m+n)。。。)
2,最接近的三数之和(同三数之和,双指针,多一层判断)
3,四数之和(同三数之和,用当前max,min与target比较,进行剪枝)
4,移除元素
5,有效的字母异位词(用一个26位计数器表,比较时,s增,t减,O(n)即可)

2020.1.2
1、字母异位词分组

2020.1.5
1、整数反转(负数%10是负数,注意溢出判断)
2、回文数(回文数和整数反转不同不会溢出,注意剪枝)
3、罗马数字转整数(IV与VI的区别)
4、最长公共前缀
5、有效的括号
6、实现strStr(双指针)

2020.1.6
1、搜索插入位置(有序数组,考虑二分查找)
2、删除字符串中的所有相邻重复项(两个栈)
3、删除最外层的括号(注意if的判断顺序)
4、柱状图中最大的矩形(单调栈)
5、接雨水(testCase: [5,2,4,2,3], [2,1,0,2], [4,2,0,3,2,5], [0,1,0,2,1,0,1,3,2,1,2,1]

2020.1.7
1、排列硬币(注意返回值,边界值检验)
2、二叉树的最小深度(找重复值问题)
3、二叉树的最近公共祖先

2020.1.8
1、对称二叉树
2、二叉树的最大深度
3、二叉树最大宽度

2020.1.9
1、二叉搜索树结点最小距离(中序遍历)
2、二叉树的所有路径
3、二叉搜索树范围和(不用递归的中序遍历,利用二叉搜索树二分查找)


2020-3

2020.3.14
1、300. 最长上升子序列 动态规划:若0 < j < i, 则若nums[j] < nums[i],则上升子序列状态会发生变化,dp[i] = max(dp[i] ,dp[j] + 1)

2020.3.15
1、200.岛屿数量: 第一次到岛上, 便把这片岛屿沉下去
2、695.岛屿的最大面积:同上,

2020.3.16
1、面试题01.06 字符串压缩

2020.3.17
1、1160 拼写单词 注意保证chars中的每个字母只能使用一次

2020.3.21
1、365 水壶问题 BFS/DFS 题目理解错了,但是还不会做


2020-5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值