LeetCode 经典 150

经典面试 150 题,面试必备算法题目

150 道题目

简单

40

道题目

中等

92

道题目

困难

18

道题目

简单 (40 题)

合并两个有序数组

将两个升序数组合并到一个数组中,并保持升序。

数组
查看详情

移除元素

从数组中移除指定元素,并返回新数组的长度。

数组
查看详情

删除有序数组中的重复项

从有序数组中删除重复项,使每个元素只出现一次。

数组
查看详情

多数元素

找出数组中出现次数超过一半的元素。

数组
查看详情

买卖股票的最佳时机

找到一次买卖股票的最大收益。

数组
查看详情

罗马数字转整数

将罗马数字转换为整数。

字符串
查看详情

最后一个单词的长度

返回字符串中最后一个单词的长度。

字符串
查看详情

最长公共前缀

找出字符串数组中的最长公共前缀。

字符串
查看详情

找出字符串中第一个匹配项的下标

在字符串 haystack 中找到 needle 的第一次出现位置。

字符串
查看详情

判断子序列

判断字符串 s 是否是字符串 t 的子序列。

双指针
查看详情

验证回文串

判断一个字符串是否是回文,只考虑字母和数字,忽略大小写。

双指针
查看详情

赎金信

判断能否用杂志中的字符构成赎金信。

哈希表
查看详情

同构字符串

判断两个字符串是否是同构的,即字符映射关系唯一。

哈希表
查看详情

单词规律

判断字符串是否符合给定单词规律。

哈希表
查看详情

有效的字母异位词

判断两个字符串是否是字母异位词。

哈希表
查看详情

两数之和

从数组中找到两个数,使它们的和等于目标值。

哈希表
查看详情

快乐数

判断一个数是否是快乐数,通过平方和循环最终变为 1。

哈希表
查看详情

存在重复元素 II

判断数组中是否存在重复元素,且索引距离不超过 k。

哈希表
查看详情

汇总区间

将数组中的连续区间进行汇总。

区间
查看详情

有效的括号

判断括号字符串是否有效。

查看详情

环形链表

判断链表是否有环。

链表
查看详情

合并两个有序链表

将两个升序链表合并为一个升序链表。

链表
查看详情

相同的树

判断两棵二叉树是否相同。

二叉树
查看详情

二叉树的最大深度

计算二叉树的最大深度。

二叉树
查看详情

翻转二叉树

翻转二叉树,即交换每个节点的左右子树。

二叉树
查看详情

对称二叉树

判断二叉树是否是对称的。

二叉树
查看详情

路径总和

判断是否存在从根到叶节点的路径,其节点值之和等于目标值。

二叉树
查看详情

完全二叉树的节点个数

计算完全二叉树的节点总数。

二叉树
查看详情

二叉搜索树的最小绝对差

找到二叉搜索树中任意两节点值的最小绝对差。

二叉搜索树
查看详情

二叉树的层平均值

计算二叉树每一层节点值的平均值。

二叉树层次遍历
查看详情

将有序数组转换为二叉搜索树

将升序数组转换为高度平衡的二叉搜索树。

分治
查看详情

搜索插入位置

找到目标值在排序数组中的插入位置。

二分查找
查看详情

二进制求和

计算两个二进制字符串的和,返回结果字符串。

位运算
查看详情

颠倒二进制位

将一个 32 位整数的二进制位颠倒。

位运算
查看详情

位1的个数

计算一个整数的二进制表示中 1 的个数。

位运算
查看详情

只出现一次的数字

找到数组中只出现一次的数字,其他数字均出现两次。

位运算
查看详情

回文数

判断一个整数是否是回文数。

数学
查看详情

加一

将数字数组表示的整数加一,返回结果数组。

数学
查看详情

爬楼梯

计算到达楼梯顶的不同方法数,假设每次可以爬一阶或两阶。

一维动态规划
查看详情

x 的平方根

计算 x 的平方根,结果向下取整。

数学
查看详情

中等 (92 题)

删除有序数组中的重复项 II

从有序数组中删除重复项,使每个元素最多出现两次。

数组
查看详情

轮转数组

将数组向右轮转 k 个位置。

数组
查看详情

跳跃游戏

判断是否能从数组起点跳到终点。

数组
查看详情

跳跃游戏 II

计算从数组起点到终点的最少跳跃次数。

数组
查看详情

买卖股票的最佳时机 II

可以进行多次交易,求最大收益。

数组
查看详情

H 指数

计算研究者的 H 指数,表示至少有 h 篇论文引用次数不低于 h。

数组
查看详情

O(1) 时间插入、删除和获取随机元素

设计一个支持上述操作的数据结构。

数组
查看详情

除自身以外数组的乘积

返回一个数组,数组中第 i 个元素是原数组中所有元素的乘积,除自身外。

数组
查看详情

加油站

判断是否能绕环路行驶一圈。

数组
查看详情

整数转罗马数字

将整数转换为罗马数字。

字符串
查看详情

反转字符串中的单词

反转字符串中的单词顺序,但保持单词内部字符顺序不变。

字符串
查看详情

Z 字形变换

将字符串按 Z 字形排列后逐行读取。

字符串
查看详情

两数之和 II - 输入有序数组

从有序数组中找到两个数,使它们的和等于目标值。

双指针
查看详情

盛最多水的容器

找到两条垂直线组成的容器能容纳的最大水量。

双指针
查看详情

三数之和

在数组中找到所有和为零的三元组,数组中无重复三元组。

双指针
查看详情

长度最小的子数组

找到数组中和至少为目标值的最短连续子数组长度。

滑动窗口
查看详情

无重复字符的最长子串

找到字符串中无重复字符的最长子串长度。

滑动窗口
查看详情

有效的数独

判断一个 9x9 的数独是否有效。

矩阵
查看详情

螺旋矩阵

按螺旋顺序返回矩阵中的所有元素。

矩阵
查看详情

旋转图像

将二维矩阵顺时针旋转 90 度。

矩阵
查看详情

矩阵置零

如果矩阵中的某个元素是零,则将其所在行和列都置零。

矩阵
查看详情

生命游戏

根据规则更新二维网格中的细胞状态。

矩阵
查看详情

字母异位词分组

将字母异位词分组。

哈希表
查看详情

最长连续序列

找到数组中最长的连续序列长度,要求时间复杂度为 O(n)。

哈希表
查看详情

合并区间

合并重叠的区间。

区间
查看详情

插入区间

将一个新区间插入到已排序的非重叠区间中,并合并可能的重叠区间。

区间
查看详情

用最少数量的箭引爆气球

找到引爆所有气球所需的最少箭数。

区间
查看详情

简化路径

简化 Unix 风格绝对路径。

查看详情

两数相加

将两个链表表示的数字相加,返回结果链表。

链表
查看详情

随机链表的复制

复制一个带随机指针的链表。

链表
查看详情

逆波兰表达式求值

计算逆波兰表达式的值。

查看详情

最小栈

设计一个支持获取最小值的栈。

查看详情

反转链表 II

反转链表的指定区间。

链表
查看详情

删除链表的倒数第 N 个结点

删除链表的倒数第 N 个节点。

链表
查看详情

删除排序链表中的重复元素 II

删除链表中的重复元素,只保留不重复的元素。

链表
查看详情

分隔链表

将链表分隔为小于 x 的部分和大于等于 x 的部分。

链表
查看详情

旋转链表

将链表向右旋转 k 个位置。

链表
查看详情

LRU 缓存

设计一个支持最近最少使用 (LRU) 策略的数据结构。

链表
查看详情

从前序与中序遍历序列构造二叉树

根据前序和中序遍历序列构造二叉树。

二叉树
查看详情

从中序与后序遍历序列构造二叉树

根据中序和后序遍历序列构造二叉树。

二叉树
查看详情

填充每个节点的下一个右侧节点指针 II

为二叉树的每个节点填充右侧指针,支持任意结构。

二叉树
查看详情

二叉树展开为链表

将二叉树展开为链表,按前序遍历顺序。

二叉树
查看详情

求根节点到叶节点数字之和

将根到叶节点路径表示的数字相加。

二叉树
查看详情

二叉搜索树迭代器

设计一个迭代器,按中序遍历顺序访问二叉搜索树。

二叉树
查看详情

二叉树的最近公共祖先

找到二叉树中两个节点的最近公共祖先。

二叉树
查看详情

二叉树的右视图

返回二叉树的右视图,按层次返回每层最右侧节点。

二叉树层次遍历
查看详情

二叉树的层序遍历

按层次顺序返回二叉树的节点值。

二叉树层次遍历
查看详情

二叉树的锯齿形层序遍历

按锯齿形顺序返回二叉树的节点值。

二叉树层次遍历
查看详情

二叉搜索树中第 K 小的元素

找到二叉搜索树中第 K 小的元素。

二叉搜索树
查看详情

验证二叉搜索树

验证一个二叉树是否是二叉搜索树。

二叉搜索树
查看详情

岛屿数量

计算二维网格中岛屿的数量。

查看详情

被围绕的区域

将被 'X' 包围的 'O' 区域替换为 'X'。

查看详情

除法求值

计算除法表达式的值,给定变量间的关系。

查看详情

克隆图

克隆一个无向图。

查看详情

课程表

判断是否可以完成所有课程,课程间有依赖关系。

查看详情

课程表 II

返回一个可以完成所有课程的顺序。

查看详情

蛇梯棋

找到从起点到终点的最少骰子投掷次数。

图的广度优先搜索
查看详情

最小基因变化

找到从起始基因到目标基因的最小变化次数。

图的广度优先搜索
查看详情

实现 Trie (前缀树)

设计一个支持插入、搜索和前缀匹配的数据结构。

字典树
查看详情

添加与搜索单词 - 数据结构设计

设计一个支持添加和正则搜索的字典树。

字典树
查看详情

电话号码的字母组合

返回电话号码数字对应的所有可能的字母组合。

回溯
查看详情

组合

从 1 到 n 中选出 k 个数的所有组合。

回溯
查看详情

全排列

返回数组的所有可能排列。

回溯
查看详情

组合总和

找到数组中所有和等于目标值的组合,允许重复选取。

回溯
查看详情

括号生成

生成所有合法的括号组合,给定括号对数量 n。

回溯
查看详情

单词搜索

判断二维网格中是否存在指定单词。

回溯
查看详情

排序链表

对链表进行排序,要求时间复杂度为 O(n log n)。

分治
查看详情

建立四叉树

根据二维网格构造四叉树。

分治
查看详情

环形子数组的最大和

找到数组中环形子数组的最大和。

Kadane算法
查看详情

最大子数组和

找到数组中连续子数组的最大和。

Kadane算法
查看详情

寻找峰值

找到数组中的峰值,峰值是比邻居大的元素。

二分查找
查看详情

搜索二维矩阵

判断二维矩阵中是否存在目标值。

二分查找
查看详情

搜索旋转排序数组

在旋转排序数组中找到目标值。

二分查找
查看详情

在排序数组中查找元素的第一个和最后一个位置

找到目标值在排序数组中的起始和结束位置。

二分查找
查看详情

寻找旋转排序数组中的最小值

找到旋转排序数组中的最小值。

二分查找
查看详情

数组中的第K个最大元素

找到数组中第 K 个最大的元素。

查看详情

查找和最小的 K 对数字

找到两个数组中和最小的 K 对数字。

查看详情

只出现一次的数字 II

找到数组中只出现一次的数字,其他数字均出现三次。

位运算
查看详情

数字范围按位与

计算范围 [m, n] 内所有数字的按位与结果。

位运算
查看详情

阶乘后的零

计算阶乘结果末尾零的数量。

数学
查看详情

Pow(x, n)

计算 x 的 n 次幂。

数学
查看详情

单词拆分

判断字符串是否可以由字典中的单词拼接而成。

一维动态规划
查看详情

打家劫舍

计算可以偷窃的最大金额,不能偷相邻的房屋。

一维动态规划
查看详情

零钱兑换

找到凑成目标金额的最少硬币数。

一维动态规划
查看详情

三角形最小路径和

找到从三角形顶部到底部的路径中最小的路径和。

多维动态规划
查看详情

最长递增子序列

找到数组中最长递增子序列的长度。

一维动态规划
查看详情

最小路径和

找到二维网格中从左上到右下的路径中最小的路径和。

多维动态规划
查看详情

不同路径 II

计算从网格左上到右下的不同路径数,网格中有障碍物。

多维动态规划
查看详情

交错字符串

判断一个字符串是否由另两个字符串交错组成。

多维动态规划
查看详情

编辑距离

计算将一个字符串转换为另一个字符串的最少操作数。

多维动态规划
查看详情

最长回文子串

找到字符串中的最长回文子串。

多维动态规划
查看详情

最大正方形

找到二维网格中全为 1 的最大正方形面积。

多维动态规划
查看详情

困难 (18 题)

分发糖果

根据评分分发糖果,每个孩子至少一个,且评分高的孩子比邻居多。

数组
查看详情

接雨水

计算柱状图中能够接住的雨水总量。

数组
查看详情

文本左右对齐

将字符串数组按照指定宽度进行左右对齐。

字符串
查看详情

串联所有单词的子串

在字符串中找到所有能串联给定单词数组的子串的起始索引。

滑动窗口
查看详情

最小覆盖子串

找到字符串中包含另一个字符串所有字符的最小子串。

滑动窗口
查看详情

基本计算器

实现一个支持括号和加减法的计算器。

查看详情

K 个一组翻转链表

将链表每 K 个节点一组进行翻转。

链表
查看详情

二叉树中的最大路径和

找到二叉树中节点值之和最大的路径。

二叉树
查看详情

单词接龙

找到从起始单词到目标单词的最短转换序列长度。

图的广度优先搜索
查看详情

单词搜索 II

在二维网格中找到所有给定的单词。

字典树
查看详情

N 皇后 II

计算 N 皇后的所有解决方案数量。

回溯
查看详情

合并 K 个升序链表

将 K 个升序链表合并为一个升序链表。

分治
查看详情

寻找两个正序数组的中位数

找到两个正序数组的中位数,要求时间复杂度为 O(log(m+n))。

二分查找
查看详情

数据流的中位数

设计一个数据结构,支持动态获取数据流的中位数。

查看详情

IPO

选择最多的项目以获得最大利润,项目有启动成本和利润。

查看详情

直线上最多的点数

找到平面上最多共线的点数。

数学
查看详情

买卖股票的最佳时机 III

找到最多进行两次交易的最大收益。

多维动态规划
查看详情

买卖股票的最佳时机 IV

找到最多进行 k 次交易的最大收益。

多维动态规划
查看详情