Skip to content

Fay321/leetcode-exercise

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

leetcode-exercise

leetcode exercises with python

序号 题目名 难度 日期 备注
1 two sum Easy March 15
2 longest-substring-without-repeating-characters Medium March 15 用动态规划做的,但想的是从右往左做的,而且写复杂了
3 longest-palindromic-substring Medium March 17 最长回文子序列,尝试的动态规划也超时了,需要再检查
4 palindrome-number Easy April 8 数字回文
5 single number Easy April 9 找唯一出现一次的数字
6 Jewels and Stones Easy April 10 找s中出现在J中字符的个数
7 Majority Element Easy April 11 找数组中出现次数大于数组长度一半的一个数
8 reverse linked list Easy April 14 逆转链表,对链表这个结构不熟,这道easy题还做了一阵子
9 find-all-numbers-disappeared-in-an-array Easy April 15 直接用了两个集合做差集
10 kth-largest-element-in-an-array Medium April 15 找数组中第k大的数
11 house-robber Easy April 20 找数组中不相邻元素最大和(动态规划)
12 integer-to-roman Medium(Easy) May 28 整数转为罗马数字
13 string-to-integer Medium(Hard) May 29 字符串中把前面的数字找出来并转为为int(难度在于未想到一些case)
14 max-increase-to-keep-city-skyline Easy May 29 从上方、右侧看楼高保持一致的情况下,增加楼层高度
15 hamming-distance Easy May 29 把数字转为二进制,看哪些位置不同
16 3sum Medium May 29 【注意】之前自己想到的是n^3的复杂度遍历,参考思路知道先排序,再对每个数,求剩下的数字之后为target的list
17 maximum-product-subarray Medium May 30 思路:维护两个数组,到这个数为止的最大值、最小值
18 shortest-unsorted-continuous-subarray Easy June 1 一开始想到个O(NlogN)复杂度的,觉得可能过不了,就尝试想了O(N)的,但是反而边界条件很难想,最后用一开始想到的简单解法过了
19 merge-intervals Medium June 1 用了类似于暴力搜索的思路解决(时间复杂度高)如果先按照interval的start排序,这样复杂度低些
20 maximum-depth-of-binary-tree Easy June 1 【注意】用递归求二叉树的深度
21 move-zeroes Easy June 2 把0都移到数组右侧(想的时候想绕了,想的是非零元从右边往左移动,其实应该是把零往右侧非零处交换
22 daily-temperatures Medium June 2 【注意】自己的思路是从右边往左记录比这个位置大的数,这样如果b比a小的话,只需要查看比b更大的数和a比较即可。看了效率更高的思路是从左往右,大的数值可以消掉栈中的元素
23 counting-bits Medium June 3 自己思路复杂度是O(N*size),然后找到一个找到规律后的O(N)解答
24 palindromic-substrings Medium June 3 【思路】回文子串(核心思路:就是回文往左右扩一个位置看是否还是回文)
25 merge-two-sorted-lists Easy June 3 合并排序的链表。主要是注意怎么生成链表head,prev,next
26 climbing-stairs Easy June 5 【思路】自己是用组合数(scipy.special.comb)来挨着计算,更好的思路是用动态规划
27 best-time-to-buy-and-sell-stock Easy June 5 找最大子序列和
28 subsets Medium June 5 用了itertools.product笛卡儿积
29 top-k-frequent-elements Medium(Easy) June 5 出现次数top K的数字
30 unique-paths Medium June 5 从左上角到右下角的不同路径(本质上就是计算组合数)
31 find-the-duplicate-number Medium(Easy) June 5 找重复数字
32 trapping-rain-water Medium June 5 蓄水问题,在于观察到这个格子蓄水量为 max(min(左侧最大值,右侧最大值)-高度,0)
33 sort-colors Medium June 7 只包含0,1,2的数字排序,直接计算各个数字出现的次数,挨着修改
34 permutations Medium June 7 递归来求permutation
35 product-of-array-except-self Medium June 7 用了两个字典分别存除了i左侧的积、右侧的积,然后再分别乘起来。这思路空间开销大
36 rotate-image Medium June 8 【注意】图像旋转90度,就是先上下翻转,再沿对角线翻转
37 maximum-subarray Easy June 8 记录包括第i个位置的最大值
38 group-anagrams Medium June 8 判断两个词语字符组成完全相同
39 combination-sum Medium June 10 自己的递归思路+去重运行慢,看了一个解答后,先对candidates排序后,就不必再考虑去重,速度快很多
40 container-with-most-water Medium June 10 最开始想的是挨着算两两柱子形成的容器容量。但这个会超时。用最左、最右两个柱子作为开端;而两个柱子中最低的那个限制了容量,所以要想宽度减少而容量增加只可能是高度变高,所以把两个柱子中较低的那个指针往中间移动
41 word-break Medium June 10 【注意】自己想的递归暴力搜索超时,后面改用动态规划
42 letter-combinations-of-a-phone-number Medium June 10 就是用递归得到permutation
43 search-a-2d-matrix-ii Medium June 10 自己想的从左上角查找,观察题目得到规律应该从右上角查更快些
44 valid-parentheses Medium June 10 括号匹配(注意栈为空了,才说明都匹配完了)
45 decode-string Medium June 12 类似于括号匹配,用栈
46 coin-change Medium June 12 【注意】用动态规划来解决换零钱问题
47 sliding-window-maximum Hard June 12 如果用最简单的kN复杂度的思路也可以直接解决
48 number-of-islands Medium June 12 【注意】用了DFS,找到所有相邻岛屿
49 perfect-squares Medium June 12 【注意】一个数可以拆成的最小平方和数目,想到了用类似于change coin动态规划。还有一个求解方法是用DFS
50 generate-parentheses Medium June 12 【注意】想的递归思路超时,看了solution后是用DFS思路
51 target-sum Medium June 20 给不同符号,求和等于给定值(用一个字典记录到nums第i个位置为止,等于j的不同搭配数有多少,有点像之前做遍历搜索
52 queue-reconstruction-by-height Medium June 22 【注意】这道题思路没想到,是先对身高从高到低排序,再在组内按照index从小到大排序,然后依次插入
53 Subarray Sum Equals K Medium June 22 【注意】用哈希表。即要确定一个subarray和是否为k,转为看[0:n]和为B的话,看是否有[0:m]和为B-k,这样[m:n]就是要求的子串
54 Find All Anagrams in a String Easy June 22 找s子串的字符(不考虑顺序)等于给定字符p的index位置
55 jump-game Medium June 23 【自己想到的思路是类似于solution中方法一,不过写得更耗时;参考了一个答案是类似于solution方法四贪心法,遍历数组,剩余步数step不为零的前提下,每次向前移动一步,将当前的num[i]和step相比较取较大者,作为剩余步数step
56 find-first-and-last-position-of-element-in-sorted-array Medium June 23 遍历查找
57 longest-increasing-subsequence Medium June 23 动态规划:包括位置i在内的最长递增子序列长度
58 longest-consecutive-sequence Hard June 24 自己想到的思路是先排序,再看是否连续;另一个O(N)思路就是把这个nums处理为集合,然后挨着往上界、下界找
59 merge-two-binary-trees Easy June 24 【linked list】(思路:递归)把二叉树加起来
60 invert-binary-tree Easy June 24 【linked list】(思路:递归)把二叉树左右对称翻转
61 course-schedule Medium June 26 【注意】判断有向图是否有环(拓扑排序)
62 binary-tree-inorder-traversal Medium June 26 【linked list】二叉树的中序遍历(先左,再root,再右),自己想的思路是递归,还可以用stack来存所有左节点
63 binary-tree-level-order-traversal Medium July 1 把二叉树的值每一层每一层输出(从左往右)
64 burst-balloons Hard July 1 【注意】用动态规划,需要想清楚dp定义,而且递推式也要注意
65 symmetric-tree Easy July 1 检查是否为对称树
66 minimum-path-sum Medium July 1 矩阵里可往右、往下移动,找最小路径和(动态规划),注意初始条件
67 min-stack Easy July 1 最小栈
68 palindrome-linked-list Easy July 1 判断链表是否是回文
69 convert-bst-to-greater-tree Easy July 3 【注意】BST是右侧>中间>左侧
70 unique-binary-search-trees Medium July 3 给定1-n个数有多少独特的BST。把题看懂后,基于BST特点,想到了合适的递推式
71 maximal-square Medium July 3 【注意】最大正方形面积 以当前点(x,y) = '1' 为右下角的最大正方形的边长,递推式f(x,y) = min( f(x-1,y), f(x,y-1), f(x-1,y-1)) + 1.
72 partition-equal-subset-sum Medium July 3 判断能否把包含正整数的lst分为和相等的2部分
73 search-in-rotated-sorted-array Medium July 3 二分法,不过主要是判断target到底属于左/右区间会稍微注意下哪侧区间是有序的
74 best-time-to-buy-and-sell-stock-with-cooldown Medium July 7 【注意】递推公式没想到,参考令sell[i] 表示第i天未持股时,获得的最大利润,buy[i]表示第i天持有股票时,获得的最大利润。
75 linked-list-cycle Easy July 7 判断链表是否有环,其中memory O(1)的方法是使用【快慢指针】
76 path-sum-iii Easy July 7 二叉树从上到下共有多少条路的和等于指定数值
77 intersection-of-two-linked-lists Easy July 7 两个链表是否有交叉点。memory O(1)思路是分别遍历两个链表,得到分别对应的长度。然后求长度的差值,把较长的那个链表向后移动这个差值的个数,然后一一比较
78 add-two-numbers Medium July 8 两个链表代表数字,求和
79 diameter-of-binary-tree Easy July 8 二叉树中最长路径,可不过root
80 longest-palindromic-substring Medium July 8 【注意】中心扩散法,还有马拉车算法
81 lru-cache Medium July 9 双向链表+dict来实现可以把least recently used对应node删去
82 flatten-binary-tree-to-linked-list Medium July 22 把节点都移到右侧(思路是先直接得到右侧节点顺序list,再挨着赋值)
83 word-search Medium July 22 看board横纵相连的子串能否得到指定的word(dfs)
84 remove-invalid-parentheses Hard july 22 得到一个字符串移除不当括号的所有可能(from itertools import combinations, product)
85 construct-binary-tree-from-preorder-and-inorder-traversal Medium July 23 root是preorder序列的第一个节点
86 implement-trie-prefix-tree Medium July 23 Prefix Tree,用一层一层字典构造的,主要insert改了一两次逻辑才对
87 house-robber-iii Medium July 23 【注意】这个递归return的要想清楚
88 remove-nth-node-from-end-of-list Medium July 28 思路:一个指针多走了n+1步
89 linked-list-cycle-ii/submissions/ Medium July 28 判断链表是否有环,以及入口在哪里。【注意】这个思路很巧的地方在于当快指针(每次走2步),慢指针(每次走1步)相遇后,让慢指针和从起点出发的指针再相遇的地方就是环的入口
90 lowest-common-ancestor-of-a-binary-tree Medium July 28 递归地判断点p,q是否属于一个root
91 next-permutation Medium July 28 【注意】题意看了ref后才理解到
92 sort-list Medium July 29 归并排序,用快慢指针找到中间位置
93 validate-binary-search-tree Medium July 29 递归地判断是否为bst
94 evaluate-division Medium July 29 collections.defaultdict(dict),还有dfs
95 task-scheduler Medium July 29 优先安排出现次数最多的task
96 serialize-and-deserialize-binary-tree Hard Aug 3 用例子里给的每一层layer记录来序列号二叉树
97 edit-distance Hard Aug 3 【注意】用到动态规划,递推式是依据参考
98 merge-k-sorted-lists Hard Aug 3 把所有点放在list中,然后排序
99 regular-expression-matching Hard Aug 5 正则表达式中,注意判断 符号*这个有两种情况任一一种成立即可self.isMatch(s[1:],p) or self.isMatch(s,p[2:])
100 longest-valid-parentheses Hard Aug 19 最长有效括号子串,自己写的思路超时,后参考ref写stack的思路
101 median-of-two-sorted-arrays Hard Aug 19 两个有序数组的中位数,转为思路求dik小的数
102 minimum-window-substring Hard Sep 2 给定一个字符串S和T,在S中找到一个最小的子串包含T中的所有字符(思路:左右指针,滑动窗口)

About

leetcode exercises with python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages