
面试必须掌握的101题
文章平均质量分 86
硕风和炜
硕风和炜,优快云官方Java领域优质创作者,阿里云社区专家博主,华为云云享专家,第十二届蓝桥杯JavaB组省1,保研,国家奖学金,JAVA开发技术栈,面试刷题,面经八股文,经验分享,好用的网站工具分享
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【LeetCode: 面试变体: 236. 二叉树的最近公共祖先 + 数组 + 递归】
【LeetCode: 面试变体: 236. 二叉树的最近公共祖先 + 数组 + 递归】给定一个数组来表示二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”原创 2025-02-26 10:55:17 · 923 阅读 · 0 评论 -
【LeetCode: 236. 二叉树的最近公共祖先 + 二叉树 + 递归】
【LeetCode: 236. 二叉树的最近公共祖先 + 二叉树 + 递归】给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”原创 2025-02-25 09:58:09 · 655 阅读 · 0 评论 -
【LeetCode: 556. 下一个更大元素 III + 思维】
【LeetCode: 556. 下一个更大元素 III + 思维】给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。原创 2025-02-07 18:57:06 · 934 阅读 · 0 评论 -
【LeetCode: 40. 组合总和 II + 递归】
【LeetCode: 40. 组合总和 II + 递归】给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。注意:解集不能包含重复的组合。原创 2025-01-26 10:37:23 · 749 阅读 · 0 评论 -
【LeetCode: 912. 排序数组 + 归并排序】
【LeetCode: 912. 排序数组 + 归并排序】给你一个整数数组 nums,请你将该数组升序排列。你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。原创 2025-01-10 10:31:25 · 617 阅读 · 0 评论 -
【LeetCode: 763. 划分字母区间 + 贪心】
【LeetCode: 763. 划分字母区间 + 贪心】给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。原创 2025-01-09 11:21:32 · 994 阅读 · 0 评论 -
【LeetCode: 560. 和为 K 的子数组 + 前缀和 + 哈希表】
【LeetCode: 560. 和为 K 的子数组 + 前缀和 + 哈希表】给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。子数组是数组中元素的连续非空序列。原创 2025-01-08 10:58:45 · 533 阅读 · 0 评论 -
【LeetCode: 695. 岛屿的最大面积 + DFS】
【LeetCode: 695. 岛屿的最大面积 + DFS】给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。原创 2025-01-07 11:03:51 · 595 阅读 · 0 评论 -
【LeetCode: 55. 跳跃游戏 + 贪心】
【LeetCode: 55. 跳跃游戏 + 贪心】给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。原创 2025-01-06 15:52:49 · 788 阅读 · 0 评论 -
【LeetCode: 437. 路径总和 III + 二叉树 + 递归】
【LeetCode: 437. 路径总和 III + 二叉树 + 递归】给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。原创 2025-01-05 18:05:19 · 1560 阅读 · 0 评论 -
【LeetCode: 104. 二叉树的最大深度 + 二叉树 + 递归】
【LeetCode: 104. 二叉树的最大深度 + 二叉树 + 递归】给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。原创 2025-01-04 11:22:10 · 505 阅读 · 0 评论 -
【LeetCode: 112. 路径总和 + 二叉树 + 递归】
【LeetCode: 112. 路径总和 + 二叉树 + 递归】给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。原创 2025-01-02 11:11:00 · 832 阅读 · 0 评论 -
【LeetCode: 376. 摆动序列 + 动态规划】
【LeetCode: 376. 摆动序列 + 动态规划】如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数原创 2025-01-01 19:41:48 · 997 阅读 · 0 评论 -
【LeetCode: 845. 数组中的最长山脉 + 动态规划】
【LeetCode: 845. 数组中的最长山脉 + 动态规划】给出一个整数数组 arr,返回最长山脉子数组的长度。如果不存在山脉子数组,返回 0 。原创 2024-12-24 12:06:35 · 930 阅读 · 0 评论 -
【LeetCode: 142. 环形链表 II + 链表】
【LeetCode: 142. 环形链表 II + 链表】给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。原创 2024-12-23 11:07:22 · 844 阅读 · 0 评论 -
【LeetCode: 141. 环形链表 + 链表】
【LeetCode: 141. 环形链表 + 链表】给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。原创 2024-12-22 15:26:47 · 845 阅读 · 0 评论 -
【LeetCode: 876. 链表的中间结点 + 链表】
【LeetCode: 876. 链表的中间结点 + 链表】给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。原创 2024-12-22 15:20:43 · 555 阅读 · 0 评论 -
【LeetCode: 24. 两两交换链表中的节点 + 链表】
【LeetCode: 24. 两两交换链表中的节点 + 链表】给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。原创 2024-12-22 11:47:54 · 1179 阅读 · 0 评论 -
【LeetCode: 92. 反转链表 II + 链表】
【LeetCode: 92. 反转链表 II + 链表】给你单链表的头指针 head 和两个整数 left 和 right ,其中 left原创 2024-12-20 15:32:59 · 714 阅读 · 0 评论 -
【LeetCode: 402. 移掉 K 位数字 + 单调栈】
【LeetCode: 402. 移掉 K 位数字 + 单调栈】给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。原创 2024-12-14 10:55:36 · 874 阅读 · 0 评论 -
【LeetCode: 160. 相交链表 + 链表】
【LeetCode: 160. 相交链表 + 链表】给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。原创 2024-12-09 16:27:43 · 1025 阅读 · 0 评论 -
【LeetCode: 94. 二叉树的中序遍历 + 栈】
【LeetCode: 94. 二叉树的中序遍历 + 栈】给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。原创 2024-12-04 11:00:06 · 617 阅读 · 0 评论 -
【LeetCode: 287. 寻找重复数 + 快慢指针】
【LeetCode: 287. 寻找重复数 + 快慢指针】给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。原创 2024-11-28 11:21:57 · 1001 阅读 · 0 评论 -
【LeetCode: 20. 有效的括号 | 栈】
【LeetCode: 20. 有效的括号 | 栈】给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:- 左括号必须用相同类型的右括号闭合。- 左括号必须以正确的顺序闭合。- 每个右括号都有一个对应的相同类型的左括号。原创 2024-10-07 10:41:16 · 1007 阅读 · 0 评论 -
【LeetCode: 19. 删除链表的倒数第 N 个结点 | 链表 + 快慢指针】
【LeetCode: 19. 删除链表的倒数第 N 个结点 | 链表 + 快慢指针】给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。原创 2024-10-05 12:09:15 · 828 阅读 · 0 评论 -
【LeetCode: 209. 长度最小的子数组 | 滑动窗口】
【LeetCode: 209. 长度最小的子数组 | 滑动窗口】给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。原创 2024-10-03 10:48:50 · 899 阅读 · 0 评论 -
【LeetCode: 59. 螺旋矩阵 II | 模拟】
【LeetCode: 59. 螺旋矩阵 II | 模拟】给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。原创 2024-10-01 19:36:02 · 499 阅读 · 0 评论 -
【LeetCode: 227. 基本计算器 II + 栈】
【LeetCode: 227. 基本计算器 II + 栈】给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。原创 2024-09-28 11:04:40 · 1103 阅读 · 0 评论 -
【LeetCode:75. 颜色分类 + 快速排序】
【LeetCode:75. 颜色分类 + 快速排序】给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。原创 2024-09-28 10:04:24 · 794 阅读 · 0 评论 -
【LeetCode:116. 填充每个节点的下一个右侧节点指针 + BFS(层次遍历)】
【LeetCode:116. 填充每个节点的下一个右侧节点指针 + BFS(层次遍历)】给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。原创 2024-09-22 11:20:48 · 1430 阅读 · 0 评论 -
【Leetcode:977. 有序数组的平方 + 有序 + 双指针】
【Leetcode:977. 有序数组的平方 + 有序 + 双指针】给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。原创 2024-09-08 12:21:01 · 853 阅读 · 0 评论 -
【Leetcode:7. 整数反转 + 数学】
【Leetcode:7. 整数反转 + 数学】给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。原创 2024-09-01 11:30:12 · 617 阅读 · 0 评论 -
【Leetcode:2. 两数相加 + 链表】
【Leetcode:2. 两数相加 + 链表】给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。原创 2024-08-30 22:12:40 · 969 阅读 · 0 评论 -
【Leetcode:88. 合并两个有序数组 + 双指针】
【Leetcode:88. 合并两个有序数组 + 双指针】给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为原创 2024-08-28 22:00:41 · 1034 阅读 · 0 评论 -
【Leetcode:543. 二叉树的直径 + 二叉树 + 递归 】
【Leetcode:543. 二叉树的直径 + 二叉树 + 递归 】给你一棵二叉树的根节点,返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。原创 2024-08-26 20:53:14 · 1017 阅读 · 0 评论 -
【Leetcode:567. 字符串的排列 + 滑动窗口】
【Leetcode:567. 字符串的排列 + 滑动窗口】给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。换句话说,s1 的排列之一是 s2 的 子串 。原创 2024-08-22 20:50:59 · 868 阅读 · 0 评论 -
【LeetCode:394. 字符串解码 + 栈 | 递归】
【LeetCode:394. 字符串解码 + 栈 | 递归】给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。原创 2024-06-19 18:22:32 · 1233 阅读 · 0 评论 -
【LeetCode:435. 无重叠区间 + 贪心 + 区间排序】
【LeetCode:435. 无重叠区间 + 贪心 + 区间排序】【LeetCode:435. 无重叠区间 + 贪心 + 区间排序】原创 2024-06-13 10:43:29 · 595 阅读 · 0 评论 -
【LeetCode:503. 下一个更大元素 II+ 单调栈】
【LeetCode:503. 下一个更大元素 II+ 单调栈】给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。原创 2024-05-29 18:25:04 · 719 阅读 · 0 评论 -
【LeetCode:496. 下一个更大元素 I + 单调栈】
【LeetCode:496. 下一个更大元素 I + 单调栈】nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。对于每个 0原创 2024-05-20 20:49:34 · 1535 阅读 · 0 评论