高级训练营 / 训练 6:算法面试100题
训练 6 算法面试100题.csv

算法面试100题

共 100 道题  · 已完成 0
0%
完成率
1
合并两个有序数组 初级

给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你合并 num...

2
搜索二维矩阵 II 中级

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列;每列的元素从上到下升序排...

3
螺旋矩阵 中级

给你一个 m 行 n 列的矩阵 matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。

4
旋转图像 中级

给定一个 n x n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在原地旋转图像。

5
反转链表 初级

给你单链表的头节点 head,请你反转链表,并返回反转后的链表。

6
环形链表 初级

给你一个链表的头节点 head,判断链表中是否有环。

7
合并两个有序链表 初级

将两个升序链表合并为一个新的升序链表并返回。

8
相交链表 初级

给你两个单链表的头节点 headA 和 headB,请你找出并返回两个单链表相交的起始节点。

9
删除链表的倒数第N个节点 中级

给你一个链表,删除链表的倒数第 n 个节点,并且返回链表的头节点。

10
两数相加 中级

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的。请你将两个数相加,并以相同形式返回一个表示和的链表。

11
回文链表 初级

给你一个单链表的头节点 head,请你判断该链表是否为回文链表。

12
删除排序链表中的重复元素 初级

给定一个已排序的链表的头 head,删除所有重复的元素,使每个元素只出现一次。

13
二叉树的前序遍历 初级

给你二叉树的根节点 root,返回它节点值的前序遍历。

14
二叉树的中序遍历 初级

给定一个二叉树的根节点 root,返回它的中序遍历。

15
二叉树的层序遍历 中级

给你二叉树的根节点 root,返回其节点值的层序遍历。

16
二叉树的最大深度 初级

给定一个二叉树 root,返回其最大深度。

17
对称二叉树 初级

给你一个二叉树的根节点 root,检查它是否轴对称。

18
翻转二叉树 初级

给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点。

19
二叉树的最近公共祖先 中级

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

20
路径总和 初级

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum。判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。

21
有效的括号 初级

给定一个只包括 '(',')','{','}','[',']'的字符串 s,判断字符串是否有效。

22
用栈实现队列 初级

请你仅使用两个栈实现先入先出队列。

23
最小栈 初级

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

24
两数之和 初级

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。

25
三数之和 中级

给你一个整数数组 nums,判断是否存在三元组满足 nums[i] + nums[j] + nums[k] == 0。返回所有和为 0 且不重复的三元组。

26
LRU缓存机制 中级

请你设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构。

27
多数元素 初级

给定一个大小为 n 的数组 nums,返回其中的多数元素。多数元素是指在数组中出现次数大于 n/2 的元素。

28
最长连续序列 中级

给定一个未排序的整数数组 nums,找出数字连续的最长序列的长度。

29
字符串相加 初级

给定两个字符串形式的非负整数 num1 和 num2,计算它们的和并同样以字符串形式返回。

30
最长公共前缀 初级

编写一个函数来查找字符串数组中的最长公共前缀。

31
数组中的第K个最大元素 中级

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

32
二分查找 初级

给定一个 n 个元素有序的整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target。

33
搜索旋转排序数组 中级

整数数组 nums 按升序排列,数组中的值互不相同。在传递给函数之前,nums 在预先未知的某个下标 k 上进行了旋转。给你旋转后的数组 nums 和一个整数 ...

34
Sqrt(x) 初级

给你一个非负整数 x,计算并返回 x 的算术平方根。

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

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

36
快速排序 中级

给你一个整数数组 nums,请你将该数组升序排列。使用快速排序算法实现。

37
归并排序 中级

给你一个整数数组 nums,请你将该数组升序排列。使用归并排序算法实现。

38
合并区间 中级

以数组 intervals 表示若干个区间的集合,请你合并所有重叠的区间。

39
岛屿数量 中级

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

40
岛屿的最大面积 中级

给你一个大小为 m x n 的二进制矩阵 grid。计算并返回 grid 中最大的岛屿面积。

41
只出现一次的数字 初级

给你一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

42
下一个排列 中级

实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

43
比较版本号 中级

给你两个版本号 version1 和 version2,请你比较它们。

44
无重复字符的最长子串 中级

给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。

45
最小覆盖子串 高级

给你一个字符串 s、一个字符串 t。返回 s 中涵盖 t 所有字符的最小子串。

46
全排列 中级

给定一个不含重复数字的数组 nums,返回其所有可能的全排列。

47
子集 中级

给你一个整数数组 nums,数组中的元素互不相同。返回该数组所有可能的子集。

48
括号生成 中级

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。

49
组合总和 中级

给你一个无重复元素的整数数组 candidates 和一个目标整数 target,找出 candidates 中可以使数字和为目标数 target 的所有不同组...

50
最大子数组和 初级

给你一个整数数组 nums,请你找出一个具有最大和的连续子数组,返回其最大和。

51
买卖股票的最佳时机 初级

给定一个数组 prices,它的第 i 个元素 prices[i] 是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易,设计一个算法来计算你所能获取的...

52
爬楼梯 初级

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶?

53
最长递增子序列 中级

给你一个整数数组 nums,找到其中最长严格递增子序列的长度。

54
最长公共子序列 中级

给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。

55
零钱兑换 中级

给你一个整数数组 coins,表示不同面额的硬币;以及一个整数 amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。

56
最小路径和 中级

给定一个包含非负整数的 m x n 网格 grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

57
不同路径 中级

一个机器人位于一个 m x n 网格的左上角。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径?

58
打家劫舍 中级

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,相邻的房屋装有相互连通的防盗系统。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报...

59
用 Rand7() 实现 Rand10() 中级

给定方法 rand7 可生成 [1,7] 范围内的均匀随机整数,试写一个方法 rand10 生成 [1,10] 范围内的均匀随机整数。

60
反转链表 II 中级

给你单链表的头指针 head 和两个整数 left 和 right,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,...

61
K个一组翻转链表 高级

给你链表的头节点 head,每 k 个节点一组进行翻转,请你返回修改后的链表。

62
合并K个排序链表 高级

给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。

63
环形链表 II 中级

给定一个链表的头节点 head,返回链表开始入环的第一个节点。如果链表无环,则返回 null。

64
排序链表 中级

给你链表的头结点 head,请将其按升序排列并返回排序后的链表。

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

给定一个已排序的链表的头 head,删除原始链表中所有重复数字的节点,只留下不同的数字。返回已排序的链表。

66
复制带随机指针的链表 中级

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。

67
两两交换链表中的节点 中级

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。

68
验证二叉搜索树 中级

给你一个二叉树的根节点 root,判断其是否是一个有效的二叉搜索树。

69
平衡二叉树 初级

给定一个二叉树,判断它是否是高度平衡的。

70
二叉树的直径 初级

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。

71
路径总和 III 中级

给定一个二叉树的根节点 root,和一个整数 targetSum,求该二叉树里节点值之和等于 targetSum 的路径数目。

72
二叉树中的最大路径和 高级

二叉树中的路径被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节点。路径...

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

给定两个整数数组 preorder 和 inorder,其中 preorder 是二叉树的先序遍历,inorder 是同一棵树的中序遍历,请构造二叉树并返回其根...

74
二叉树的锯齿形层序遍历 中级

给你二叉树的根节点 root,返回其节点值的锯齿形层序遍历。

75
二叉树的右视图 中级

给定一个二叉树的根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

76
接雨水 高级

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

77
基本计算器 II 中级

给你一个字符串表达式 s,请你实现一个基本计算器来计算并返回它的值。表达式包含非负整数、+、-、*、/,中间没有空格。

78
缺失的第一个正数 高级

给你一个未排序的整数数组 nums,请你找出其中没有出现的最小的正整数。

79
字符串转换整数 (atoi) 中级

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。

80
翻转字符串里的单词 中级

给你一个字符串 s,逐个翻转字符串中的所有单词。

81
字符串相乘 中级

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

82
验证IP地址 中级

给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 'IPv4';如果是有效的 IPv6 地址,返回 'IPv6';如果不是上述类型的 IP 地...

83
字符串解码 中级

给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 ...

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

已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次旋转后,得到输入数组。找出数组中最小的元素。

85
寻找峰值 中级

峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。

86
寻找两个正序数组的中位数 高级

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。

87
最大数 中级

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

88
求根节点到叶节点数字之和 中级

给你一个二叉树的根节点 root,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字,计算所有数字之和。

89
二叉树的完全性检验 中级

给定一个二叉树的 root,确定它是否是一个完全二叉树。

90
滑动窗口最大值 高级

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返...

91
复原IP地址 中级

给定一个只包含数字的字符串 s,用以表示一个 IP 地址,返回所有可能的有效 IP 地址。

92
路径总和 II 中级

给你二叉树的根节点 root 和一个整数目标和 targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。

93
买卖股票的最佳时机 II 中级

给定一个数组 prices,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易。

94
最长回文子串 中级

给你一个字符串 s,找到 s 中最长的回文子串。

95
编辑距离 高级

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数。

96
最长重复子数组 中级

给两个整数数组 nums1 和 nums2,返回两个数组中公共的、长度最长的子数组的长度。

97
最长有效括号 高级

给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

98
最大正方形 中级

在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。

99
链表中倒数第k个节点 初级

输入一个链表,输出该链表中倒数第k个节点。

100
二叉搜索树的第k大节点 初级

给定一棵二叉搜索树,请找出其中第k大的节点。