当前位置: 代码迷 >> 综合 >> Leecode 刷题归纳(Python——LeetCode 精选 TOP 面试题)
  详细解决方案

Leecode 刷题归纳(Python——LeetCode 精选 TOP 面试题)

热度:47   发布时间:2023-10-21 03:32:07.0

一、数组

1、简单

1)位1的个数
2)只出现一次的数字
3)杨辉三角
4)Excel表列序号 Python 中字符转ASCII码用ord(),比如ord(“A”)。
5)颠倒二进制位 进制的还是不熟。
6)买卖股票的最佳时机
7)买卖股票的最佳时机 II 又一个脑筋急转弯,理论上最佳时机就是获得所有可以获得的利润。
8)Fizz Buzz
9)多数元素
10)移动零
11)罗马数字转整数 罗马数字的性质
12)快乐数
13)丢失的数字
14)存在重复元素
15)两个数组的交集 II
16)最大子序和
17)删除有序数组中的重复项
18)字符串中的第一个唯一字符 直接检索字母更省时
19)爬楼梯
20)两数之和
21)合并两个有序数组 sorted()会创建新的存储空间, .sort()不会。
22)3的幂
23)加一
24)阶乘后的零
25)x的平方根
26)计数质数 主要是如何筛选
27)整数反转
28)外观数列

 

2、中等

1)不相交的线 Hard 动态规划,状态转移矩阵
2)子集
3)全排列
4)生命游戏
5)旋转图像 list.reverse() 数组倒置
6)扁平化嵌套列表迭代器 Hard 对迭代器不是很熟
7)除自身以外数组的乘积
8)寻找重复数
9)不同路径
10)数组中的第K个最大元素
11)盛最多水的容器 加个限定条件会快很多。
12)有序矩阵中第 K 小的元素 heapq堆的思想
13)有效的数独
14)前 K 个高频元素
15)完全平方数 容易超时,需要用状态矩阵构建,也可以找数学规律,即最小值不会超过4。
16)矩阵置零
17)四数相加Ⅱ Counter(list)可以直接构建元素所对应数量的字典
18)颜色分类
19)两整数之和 无进位加法使用异或运算计算得出,进位结果使用与运算和移位运算计算得出。
20)加油站
21)最后一块石头的重量 II Hard 背包问题
22)打乱数组
23)课程表
24)课程表Ⅱ
25)岛屿数量
26)最长连续序列
27)LRU 缓存机制
28)打家劫舍
29)最长递增子序列
30)O(1) 时间插入、删除和获取随机元素
31)寻找峰值
32)螺旋矩阵
33)搜索二维矩阵 II
34)合并区间
35)旋转数组
36)零钱兑换 背包问题
37)在排序数组中查找元素的第一个和最后一个位置
38)跳跃游戏
39)搜索旋转排序数组
40)乘积最大子数组
41)递增的三元子序列
42)最大数
43)摆动排序 II
44) Pow(x, n)
45)三数之和
46)两数相除 位运算

 

3、困难

1)接雨水
2)数据流的中位数
?普通思路耗时长,可以用堆(一种树结构)的思路,即python中的heappush,heappop,heapreplace。
Leecode 刷题归纳(Python——LeetCode 精选 TOP 面试题)
3)滑动窗口最大值
4)矩阵中的最长递增路径
5)天际线问题 Hard
6)寻找两个正序数组的中位数
7)缺失的第一个正数
8)柱状图中最大的矩形
9)计算右侧小于当前元素的个数
10)直线上最多的点数

 

二、字符串

1、简单

1)反转字符串
2)有效的字母异位词
3)验证回文串
删除字符串中空格,标点符号,保留数字和字母可用s = “”.join(ch.lower() for ch in s if ch.isalnum()),其中lower()为大写转小写,isalnum()为判断是否是数字或者字母,不是返回空。
4)有效的括号
5)实现 strStr()
6)最长公共前缀
7)分割回文串

 

2、中等

1) 前K个高频单词
2)括号生成
3)实现 Trie (前缀树) 这个思路是建立一棵字母为节点的树,这样速度更快。
4)字母异位词分组
可用于字符串排序: “”.join((lambda x:(x.sort(),x)[1])(list(str)))
5)电话号码的字母组合
6)逆波兰表达式求值
7)至少有 K 个重复字符的最长子串
8) 单词拆分
9)单词搜索
10)被围绕的区域
11)基本计算器 II
12)无重复字符的最长子串
13)最长回文子串
14)解码方法
15)分数到小数
16)字符串转换整数 (atoi)

 

3、困难

1)奇怪的打印机 Hard 状态转移矩阵
2)正则表达式匹配
3)通配符匹配
4)最小覆盖子串
5)单词接龙
6)单词拆分 II
7)单词搜索 II

 
 

三、链表

1、简单

1)删除链表中的节点 很简单,就是需要转个弯。
2)反转链表
3)合并两个有序链表
4)相交链表
5)环形链表 思路比较灵活。
6)回文链表

 

2、中等

1)排序链表 Hard 用分割的方法保证时间为O(nlogn)
2)奇偶链表
3)复制带随机指针的链表
4)删除链表的倒数第 N 个结点
5)两数相加

 

3、困难

1)合并K个升序链表

 
 

四、栈

1、简单

1)最小栈

 
 

五、二叉树

1、简单

1)二叉树的最大深度
2)二叉树的中序遍历
3)将有序数组转换为二叉搜索树
4)对称二叉树

 

2、中等

1)二叉搜索树中第K小的元素
2)从前序与中序遍历序列构造二叉树 不是很难,就是要熟悉下逻辑。
3)填充每个节点的下一个右侧节点指针 不难,主要是逻辑问题。
4)二叉树的最近公共祖先 Hard 剪枝
5)二叉树的层序遍历
6)二叉树的锯齿形层序遍历
7)验证二叉搜索树

 

3、困难

1)二叉树的序列化与反序列化
2)二叉树中的最大路径和