leetcode top100 面试medium难度

链表类

19.删除倒数第N个元素
value-shifting, index and remove, 快慢指针

        for _ in range(n):
            fast = fast.next

148.对链表排序
方法:快慢指针

328.将一个链表重排成奇Index先然后指向偶index
方法:形成两个链表,奇和偶,最后再用奇指向偶

生成器

22.输入n,产生括号配对

update问题,有点像unionfind

49.找含一样字母的单词

50.乘方计算
方法:迭代

54.螺旋遍历输出一个矩阵
方法: 矩阵旋转,*matrix

56.合并有有重叠部分的区间
方法: sorted,lambda直观操作

73.只要有0,矩阵的那一行那一列全部为0,要求O(1)space
方法:设定0row和0col,再从里面for修改

DFS

79.字符搜索,在矩阵里相邻位置一直找,判断是否能找到

94.二叉树的中序遍历 迭代写法
方法:用栈来迭代

102.给出一个二叉树,输出每一层的值
方法:有DFS,有很直观地去append的

103.给一个二叉树,曲折地输出每一层的值
方法:BFS

105.由前序和中序遍历,建立一颗二叉树
方法:要细看,迭代应该是有的

127.从开始的词变成结束的词,一次只能变一个字母,找变化序列最短长度
方法:BFS找最短路径

131.对一个字符串进行所有带有回文的划分
方法:递归,也可用dp

134.汽车加油,从一个油站走一个圈,已知每个油站可补充的油和到下一个油站所需耗费的油
方法:tank来计算start位置,total来计算能不能到

139.判断词能否被拆分成词典里的某些单词
方法:DP,前面的拆分词是否在影响后面

150.计算逆波兰法表示的算式
方法:用栈

152.给一个列表,找相邻元素最大乘积
方法:DP

166.做除法,循环小数用括号打上
方法:用了很巧妙的栈,我原来用的是字典

179.用列表给的一堆数安排成一个最大的数
方法:map的key排序

200.找岛的数量
方法:dfs去搜

207.给个先修要求图,判断是否能完成课程
方法:dfs去搜

208.建一个字典树的insert search方法
方法:有点东西,先看这个!

210.给个先修要求图,给出选课方案
方法:dfs去搜

215.在未排序的list里找第k大的元素
方法:快速选择。 max-heap

230.找BST的第k小的值
方法:中序遍历

236.找共同的最低祖先(自己也是自己的祖先)
方法: If the current (sub)tree contains both p and q, then the function result is their LCA. If only one of them is in that subtree, then the result is that one of them. If neither are in that subtree, the result is null/None/nil.
或者还可用栈来记录

240.在二维矩阵里搜索,横竖都升序排列的
方法:一开始更最右边的比,然后一步一步缩小搜索范围

300.找列表中最长递增序列的长度
方法:转换成二分搜索,很巧妙。 或者dp(不如前面快)

324.把一个列表的数字改成一上一下前行的顺序
方法:先排序,然后错开添加进去

334.判断一个列表里是否存在3个元素构成递增的子序列
方法:一个一个找,先找第一个,如果发现还小的,更新第一个

341.写迭代器来把嵌套的列表抹平,成为一个列表,不明觉厉
方法: 用[[nestedList, 0]]来作栈

347.给一个列表,返回出现频率最高的k种数字
return zip(*collections.Counter(nums).most_common(k))[0]
或者用堆

378.给一个行和列都是升序的二维数组,返回第K小的元素
return list(heapq.merge(*matrix))[k-1] 用堆
二分查找更快

380.创建一个数据结构使得insert delete getrandom都是O(1)
方法:利用hashmap和list的append
Tricky的地方在于get, remove, random都要O(1),
hashmap前两者都满足, random只能引入array。
hashmap记录val在array中的位置,添加做到O(1)很简单,
注意删除的时候,把val的index位置改成array最后一个数,
然后把这个数的index更新为val的index,
然后O(1)删除array最后一个数,O(1)删除hashmap记录就好了
random用random.choice

395.给个string和k,要求输出重复不小于k次字符的重复总和
方法:建立一个重复的string,然后输出len(s)

猜你喜欢

转载自blog.csdn.net/sinat_41613352/article/details/84501365