Skip to content

JackKuo666/leetcode_notes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

152 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

leetcode_notes

这个是我在刷leetcodeTop Interview Questions 150的时候的一些笔记

灵感来自:

顺序刷:https://github.com/qiyuangong/leetcode

分类刷:https://github.com/kamyu104/LeetCode-Solutions

Pythonic:https://github.com/cy69855522/Short-LeetCode-Python-Solutions

这里主要按照两个方向刷题:

1.顺序刷

Top Interview Questions 150 : https://leetcode.com/problemset/top-interview-questions/

2.分类刷

Top Interview Questions:easy | medium | hard :https://leetcode.com/explore/interview/card/top-interview-questions-easy/

3.其他

Python内置函数的时间复杂度:https://wiki.python.org/moin/TimeComplexity

# Title Solution Basic idea (One line) Note Difficulty
1 两数之和 Python 1. Hash O(n) and O(n) space.
2. 暴力遍历法 O(n^2) and O(1).
3.sort+双指针 >O(n) and O(n)
没排序的输入,最好使用Hashmap法 Easy
2 两个链表数字之和 Python 1.分布遍历两个链表,转成数字,相加,然后转成链表 O(n) and O(n) Medium
3 最长无重复子字符串 Python 1.哈希表+单指针 O(n) and O(1) Medium
4 两个排序列表的中位数 Python 1.常规解法:合并两个列表+sort() O((m+n)log(m+n))
2.二分查找法 O(log(m+n))
二分查找法解析见这里 Hard
5 最长回文子串 Python 1.DP: O(n^2) and O(n^2)
2.manacher算法 O(n) and O(n)
解析请看这里 Medium
6 Z字形变换解析 Python 1.创建一个list保存,然后打印出来 O(n) and O(n) 解析见我的博客 Medium
7 反向整数 Python 1.str法 24ms
2.除法 24ms
3.str法+abs 36ms
Easy
8 字符串转整形 Python 1.判断法 O(n) and O(1) Medium
9 回文数字 Python 1.str法 76ms Easy
10 正则表达式匹配 Python 1.内置函数 64ms
2.递归 TLE
3.DP O(mn) and O(mn)
解析见我的博客 Hard
11 大多数水的容器 Python 1.双指针 O(n^2) and O(1) Medium
12 整数转罗马数 Python 1.字典法 注意:4:不是 IIII 而是 IV Medium
13 罗马数转整数 Python 1.字典法 IV:4 -> IIII IX:9 -> VIIII 就可以方便的使用字典法 Easy
14 最长的共同前缀 Python 1.zip(*strs)+set O(n) and O(1) 记得zip(*strs)用法 Easy
15 三数之和 Python 1.三指针 O(n^2) and O(1) Since sorting is done in O(nlogn),which is less than O(n^2) you can ignore it.
Of course only because the total would be the sum O(nlogn + n^2)
Medium
16 三数之和最近 Python 1.三指针 O(n^2) and O(1) Medium
17 电话号码的字母组合 Python 1.数组法 O(n*4^(n+1)) and O(n)
2.回溯法 > O(n*4^(n+1)) and O(n)
Medium
18 四数之和 Python 1.递归到2sum O(n^3) and O(n) 本方法是Nsum递归到2sum的通用解法
解析见这里
Medium
19 从列表末尾删除第N个节点 Python 1.数组遍历法 O(n^2) and O(n)
2.递归法 O(n) and O(1) 推荐
3.快慢指针法 O(n^2) and O(1) 标准解法
基础解法是法1;递归法来自这里,很巧妙;标准解法是法3 Medium
20 有效的括号 Python 1.字典法 O(n) and O(n) Easy
21 合并两个排序链表 Python 1.迭代 O(n) and O(n)
2.递归 O(n) and O(1)
Easy
22 生成括号 Python 1.递归 O(4^n/(n*sqrt(n))) and O(4^n/(n*sqrt(n))) 不是特别好理解,需要回来再看 Medium
23 合并k个排序链表 Python 1.暴力法 O(nlogn) and O(n)
2.分治法:化解成两个链表合并 O(kn) and O(1)
Hard
24 成对交换节点 Python 1.一行替换 from pre -> a -> b -> b.next to pre -> b -> a -> b.next Medium
25 翻转k组链表 Python 1.暴力方法 O(3N) and O(n)
2.迭代法 O(n) and O(1)
法2继承24的翻转链表的方法,需要多回头看看 Hard
26 从排序数组中删除重复项 Python 1.while del 法 注意:这里是内置删除数组,所以不能用for,也不能用pop Easy
27 删除元素 Python 1. while del 法 方法同26 Easy
28 实现strStr() Python 1. O(nk) and O(1) Easy
29 整数相除 Python 1.快速减法 解释见代码 Medium
30 具有所有单词串联的子串 Python 1.循环s 480ms
2.循环len(words[0]) 44ms
第二个方法也会遇到"ling mind ra boo fooo..."
["fooo","barr","wing","ding","wing"]
这种不是按照4个一组切分的,
所以,法1循环s的时候不能使用4个一组循环来提速,但是法2却能
Hard
31 下一个排列 Python 1.逆序数字交换再升序 解析见博客 Medium
32 最长有效括号 Python 1.动态规划 O(n) and O(n)
2.stack O(n) and O(n)
解析见这里 Hard
33 在旋转排序数组中搜索 Python 1.二分法 O(logn) Medium
34 在排序数组中查找元素的第一个和最后一个位置 Python 1.双指针 O(n) and O(1)
2.二分法 O(logn) and O(1)
Medium
35 搜索插入位置 Python 1.二分法 O(logn) and O(1) Easy
36 有效的数独 Python 1.分治法 Medium
37 解数独 Python 1.递归 容易理解版本
2.递归 优化版本
1.解析见这里
2.解析见这里,比较难理解,回头再看
Hard
38 算和说 Python 1. O(nk) and O(1) 解析见这里 Easy
39 组合总和 Python 1.dfs Medium
40 组合总和II Python 1.dfs 注意这个是candidates是可以重复的 Medium
41 第一个缺失的正整数 Python 1.O(n) and O(1)
2.i in nums
3.sort() O(nlogn)
解法1解析在这里
xrange 返回生成器,比range省内存
Hard
42 诱捕雨水 Python 1.双数组 O(n)
2.双指针 O(n)
解析见这里 Hard
56 合并区间 Python
Java
1.sort+比大小 O(nlogn+n)=O(nlogn) sort比较费时 Medium
213 打家劫舍之二 Python
Java
1.DP O(n) 解析见这里 Medium
408 有效的单词缩写 Python
Java
1.双指针 O(n) Easy

python笔记:

1.dic.get("a", -1) # 返回dic中“a”的value,如果没有,返回“-1”

2.xrange 返回生成器,比range省内存

数组:

1 Two Sum(系列)
57 有序数组中和为s的两个数(
167 Two Sum II - Input array is sorted)
3Sum(系列) + 4sum
Contains Duplicate
3 数组中重复的数字(287. Find the Duplicate Number)
26 Remove Duplicates from Sorted Array
39 数组中出现次数超过一半的数字
53 数字在排序数组中出现的次数
旋转数组(189. Rotate Array)
Intersection of Two Arrays(系列)
228. Summary Ranges
66 构建乘积数组(cnblogs)
21 调整数组顺序使奇数位于偶数前面
61 扑克牌中的顺子
45 把数组排成最小的数
51 数组中的逆序对
Increasing Triplet Subsequence
Plus One
Move Zeroes
Valid Sudoku
Rotate Image

矩阵

4 有序矩阵中的查找( 74. Search a 2D Matrix )(系列)
29 顺时针打印矩阵(54. Spiral Matrix)(系列)
Kth Smallest Element in a Sorted Matrix
Set Matrix Zeroes(cnblogs)

位运算

位运算规律总结
15 二进制中1的个数(191. Number of 1 Bits)
56 数组中只出现一次的数字(136. Single Number)(系列)

特殊数与数位

204. Count Primes
263. Ugly Number(系列)
43 1~n整数中1出现的次数 (233. Number of Digit One )
44 数字序列中某一位的数字(400. Nth Digit)

字符串

50 第一个只出现一次的字符(387. First Unique Character in a String)
5 替换空格
Reverse String
Reverse Integer
58 翻转字符串(翻转单词与左旋转字符串)
67 把字符串转成整数
String to Integer (atoi)
Implement strStr()(cnblogs)
38 字符串的排列(全排列问题)
Longest Common Prefix(cnblogs)
Valid Parentheses(括号对)(cnblogs)
Valid Palindrome(回文词系列)
Longest Palindromic Substring
242. Valid Anagram (变位词系列)
48 最长不含重复字符的子字符串(3. Longest Substring Without Repeating Characters)
Count and Say
19 正则表达式匹配(hard,了解即可)
20 表示数值的字符串(了解即可)

栈和队列

9.1 用队列实现栈(225. Implement Stack using Queues)
9.2 用栈实现队列(232. Implement Queue using Stacks)
30 包含min函数的栈(155. Min Stack)
31 栈的压入、弹出序列
59 队列(滑动窗口)的最大值

链表

14 反转链表 206. Reverse Linked List(系列)
6 从尾到头打印链表
18 删除链表中的结点(237. Delete Node in a Linked List)
22 删除链表中倒数第k个结点(19. Remove Nth Node From End of List)(cnblogs)
52 两个链表的第一个公共结点(Intersection of Two Linked Lists)
23 有环链表问题-链表中环的入口结点(141. Linked List Cycle)
25 合并两个排序的链表(系列)(21. Merge Two Sorted Lists)
35 复杂链表的复制(138. Copy List with Random Pointer)
Add Two Numbers
328. Odd Even Linked List
Palindrome Linked List

二叉树的遍历总结(前序、中序、后序、层序、 之字形层序、垂直序)
二叉查找树的查找、插入、删除
68 树中两个节点的最低公共祖先
104. Maximum Depth of Binary Tree
110. Balanced Binary Tree
28 对称二叉树(101. Symmetric Tree)
27 二叉树的镜像
26 树的子结构(572. Subtree of Another Tree)
34 二叉树中和为某一值的路径(112. Path Sum)
124. Binary Tree Maximum Path Sum
37 序列化二叉树(297. Serialize and Deserialize Binary Tree)(cnblogs)
7 重建二叉树(系列)
Validate Binary Search Tree
36 二叉搜索树与双向链表
33 判断某序列是否为二叉搜索树的后序序列
Kth Smallest Element in a BST(cnblogs)
Convert Sorted Array to Binary Search Tree(cnblogs)
Populating Next Right Pointers in Each Node
8 二叉树中序遍历的下一个结点

查找与排序

二分查找小结
40 最小的k个数(对应Kth Largest Element in an Array)
41 数据流中的中位数(295. Find Median from Data Stream)
Median of Two Sorted Arrays
Merge Sorted Array
33 Search in Rotated Sorted Array(系列)(cnblogs)
11旋转数组的最小数字(153. Find Minimum in Rotated Sorted Array)(系列)
Search for a Range
Find Peak Element
First Bad Version
Sort Colors(cnblogs)
Top K Frequent Elements
Merge Intervals(cnblogs)
Wiggle Sort(系列)

动态规划与贪婪法

70 Climbing Stairs
14 剪绳子
剑指Offer-46:把数字翻译成字符串
42 连续子数组的最大和(53. Maximum Subarray)
Maximum Product Subarray
《算法导论》动态规划、贪婪法与分治法ppt
47:礼物的最大价值
House Robber(系列)
Unique Paths(系列)
Longest Increasing Subsequence
121. Best Time to Buy and Sell Stock(系列)
Jump Game(系列)
Coin Change(系列)
Burst Balloons
Word Break(系列)
背包问题总结

回溯法和暴力枚举法

排列与组合
12 矩阵中的字符串查找(79. Word Search 系列)
13 机器人的运动范围
Generate Parentheses
Letter Combinations of a Phone Number
Number of Islands
Subsets(系列)

分治法

16 数值的整数次方(50. Pow(x, n))
42 连续子数组的最大和(53. Maximum Subarray)
Sqrt(x)

发散思维题

17 打印从1到最大的n位数
43 n个骰子的点数
62 圆圈中最后剩下的数字(约瑟夫环问题)
64 求1+2+…+n
65 不用加减乘除做加法
231. Power of Two(系列)
Fizz Buzz(cnblogs)
Roman to Integer
Shuffle an Array

About

这个是我在刷leetcode的时候的一些笔记

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published