![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
文章平均质量分 78
主要范围涵盖高频面试题目
香农派我最爱
I'm vegetable!
展开
-
LeetCode 1115:交替打印FooBar
LeetCode 1115:交替打印FooBar题目描述解题思路代码实现SemaphoreCyclicBarrierReentrantLock + Condition总结题目描述给你一个类:class FooBar { public void foo() { for (int i = 0; i < n; i++) { print("foo"); } } public void bar() { for (int i = 0; i < n; i原创 2022-04-05 18:39:59 · 334 阅读 · 0 评论 -
LeetCode 1114:按序打印
LeetCode 1114:按序打印题目描述解题思路代码实现SynchronizedReentrantLockCyclicBarrierSemaphore法一Semaphore法二总结题目描述给你一个类:public class Foo { public void first() { print("first"); } public void second() { print("second"); } public void third() { print("third"); }}原创 2022-04-05 18:18:48 · 586 阅读 · 0 评论 -
LeetCode 1195:交替打印字符串
LeetCode 1195:交替打印字符串题目描述解题思路代码实现CyclicBarrierReentrantLock + ConditionReentrantLock (Synchronized同理)Semaphore总结题目描述编写一个可以从 1 到 n 输出代表这个数字的字符串的程序,但是:如果这个数字可以被 3 整除,输出 “fizz”。如果这个数字可以被 5 整除,输出 “buzz”。如果这个数字可以同时被 3 和 5 整除,输出 “fizzbuzz”。例如,当 n = 15,输出原创 2022-04-05 18:00:50 · 540 阅读 · 0 评论 -
LeetCode 297:二叉树的序列化与反序列化
LeetCode 297:二叉树的序列化与反序列化题目描述解题思路代码实现总结题目描述序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字...原创 2020-01-10 22:00:31 · 145 阅读 · 0 评论 -
LeetCode 236:二叉树的最近公共祖先
LeetCode 236:二叉树的最近公共祖先题目描述解题思路代码实现总结题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”解题思路对二叉树左右两部分依次进行递归遍历,最后可能出现三种情...原创 2020-01-10 21:46:30 · 126 阅读 · 0 评论 -
LeetCode 230:二叉搜索树中第k小的元素
LeetCode 230:二叉搜索树中第k小的元素题目描述解题思路代码实现总结题目描述给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。解题思路利用BST在中序遍历下,就是按从小到大顺序排列的原则。对BST进行中序遍历,我们只需检索第k个元素即为第k小的元素!!!代码实现...原创 2020-01-10 21:37:04 · 117 阅读 · 0 评论 -
LeetCode 124:二叉树中的最大路径和
LeetCode 124:二叉树中的最大路径和题目描述解题思路代码实现总结题目描述给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。解题思路通过递归求当前节点为根节点的左右子树路径和(路径和=当前节点权值+左子树节点权值+右子树节点权值),和现有最大路径和比较,并更新。当递归结束,返回上一...原创 2020-01-10 21:30:02 · 129 阅读 · 0 评论 -
LeetCode 116:填充每个节点的下一个右侧节点指针
LeetCode 116:填充每个节点的下一个右侧节点指针题目描述解题思路代码实现总结题目描述给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,...原创 2020-01-10 21:16:07 · 131 阅读 · 0 评论 -
LeetCode 108:将有序数组转化为二叉搜索树
LeetCode 108:将有序数组转化为二叉搜索树题目描述解题思路代码实现总结题目描述将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。解题思路BST按照中序遍历就是有序数组,借助递归,每次将数组分为两部分,分别递归,以数组中点作为根节点!!!代码实现去博客设置页面,选择一款你喜...原创 2020-01-10 17:55:21 · 101 阅读 · 0 评论 -
LeetCode 105:从前序与中序遍历序列构造二叉树
LeetCode 105:从前序与中序遍历序列构造二叉树题目描述解题思路代码实现总结题目描述根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3/ 9 20/ 15 7解题思路同样借鉴递...原创 2020-01-09 23:58:57 · 103 阅读 · 0 评论 -
LeetCode 104:二叉树的最大深度
LeetCode 104:二叉树的最大深度题目描述解题思路代码实现总结题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。解题思路递归思路,依次求取左子树和右子树的...原创 2020-01-09 23:52:07 · 93 阅读 · 0 评论 -
LeetCode 102:二叉树的层次遍历
LeetCode 102:二叉树的层次遍历题目描述解题思路代码实现总结题目描述给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]解题思路层次遍历,即为逐层,每层从左至右打印输...原创 2020-01-09 23:47:26 · 92 阅读 · 0 评论 -
LeetCode 101:对称二叉树
LeetCode 101:对称二叉树题目描述解题思路代码实现总结题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3说明:如果你可以运用递归和迭代两种方法...原创 2020-01-09 23:35:49 · 136 阅读 · 0 评论 -
LeetCode 98:验证二叉搜索树
LeetCode 98:验证二叉搜索树题目描述解题思路代码实现总结题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 ...原创 2020-01-09 23:25:59 · 122 阅读 · 0 评论 -
LeetCode 371:两整数之和
LeetCode 371:两整数之和题目描述解题思路代码实现总结题目描述不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1解题思路1.a + b 的问题拆分为 (a 和 b 的无进位结果) + (a 和 b 的进位结果)2....原创 2020-01-06 23:29:53 · 156 阅读 · 0 评论 -
LeetCode 268:缺失数字
LeetCode 268:缺失数字题目描述解题思路代码实现总结题目描述给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例 2:输入: [9,6,4,2,3,5,7,0,1]输出: 8说明:你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?解题思路1.相同的数异...原创 2020-01-06 23:23:44 · 174 阅读 · 0 评论 -
LeetCode 191:位1的个数
LeetCode 191:位1的个数题目描述解题思路代码实现总结题目描述编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:...原创 2020-01-06 23:15:23 · 153 阅读 · 0 评论 -
LeetCode 190:颠倒二进制位
LeetCode 190:颠倒二进制位题目描述解题思路代码实现总结题目描述颠倒给定的 32 位无符号整数的二进制位。示例 1:输入: 00000010100101000001111010011100输出: 00111001011110000010100101000000解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 432615...原创 2020-01-06 23:02:35 · 118 阅读 · 0 评论 -
LeetCode 169:多数元素
LeetCode 169:多数元素题目描述解题思路代码实现总结题目描述给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2解题思路思路一:既然众数的元素个数超过了一半,...原创 2020-01-06 22:18:41 · 156 阅读 · 0 评论 -
LeetCode 136:只出现一次的数字
LeetCode 136:只出现一次的数字题目描述解题思路代码实现总结题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解题思路将数组所有元素进行异或运算...原创 2020-01-06 22:03:57 · 103 阅读 · 0 评论 -
LeetCode 78:子集
LeetCode 78:子集题目描述解题思路代码实现总结题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]解题思路对于一个有n个元素的数组,其子集共有 2^n 个, 我...原创 2020-01-06 18:14:23 · 128 阅读 · 0 评论 -
LeetCode 350:两个数组的交集Ⅱ
LeetCode 350:两个数组的交集Ⅱ题目描述解题思路代码实现总结题目描述给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个...原创 2020-01-06 17:18:32 · 122 阅读 · 0 评论 -
LeetCode 324:摆动排序Ⅱ
LeetCode 324:摆动排序Ⅱ题目描述解题思路代码实现总结题目描述给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。示例 1:输入: nums = [1, 5, 1, 1, 6, 4]输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]示例 2:输入: nums = [...原创 2020-01-06 17:08:48 · 161 阅读 · 0 评论 -
LeetCode 242:有效的字母异位词
LeetCode 242:有效的字母异位词题目描述解题思路代码实现总结题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入...原创 2019-12-28 00:01:16 · 127 阅读 · 0 评论 -
LeetCode 179:最大数
LeetCode 179:最大数题目描述解题思路代码实现总结题目描述给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例 2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。解题思路本题最重要的一点,是排序方法的实现,单一排序中,如果遇到首字符相同的...原创 2019-12-27 23:55:54 · 154 阅读 · 0 评论 -
LeetCode 148:排序链表
LeetCode 148:排序链表题目描述解题思路代码实现总结题目描述在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5解题思...原创 2019-12-27 23:48:43 · 119 阅读 · 0 评论 -
LeetCode 75:颜色分类
LeetCode 75:颜色分类题目描述解题思路代码实现总结题目描述给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]...原创 2019-12-27 23:35:41 · 153 阅读 · 0 评论 -
LeetCode 56:合并区间
LeetCode 56:合并区间题目描述解题思路代码实现总结题目描述给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解...原创 2019-12-27 23:29:17 · 119 阅读 · 0 评论 -
LeetCode 378:有序矩阵中第k小的元素
LeetCode 378:有序矩阵中第k小的元素题目描述解题思路代码实现总结题目描述给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个元素。示例:matrix = [[ 1, 5, 9],[10, 11, 13],[12, 13, 15]],k = 8,返回 13。说明:你可以假设 k 的值...原创 2019-12-26 11:56:49 · 158 阅读 · 0 评论 -
LeetCode 347:前k个高频元素
LeetCode 347:前k个高频元素题目描述解题思路代码实现总结题目描述给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你...原创 2019-12-26 11:42:01 · 128 阅读 · 0 评论 -
LeetCode 295:数据流中的中位数
LeetCode 295:数据流中的中位数题目描述解题思路代码实现总结题目描述中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double fi...原创 2019-12-26 11:32:27 · 103 阅读 · 0 评论 -
LeetCode 215:数组中第k个最大元素
LeetCode 215:数组中第k个最大元素题目描述解题思路代码实现总结题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k ...原创 2019-12-26 11:06:46 · 160 阅读 · 0 评论 -
LeetCode 23:合并k个排序链表
LeetCode 23:合并k个排序链表题目描述解题思路代码实现总结题目描述合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6解题思路借助堆的结构,将k个排序链表依次插入小顶堆...原创 2019-12-25 23:20:56 · 140 阅读 · 0 评论 -
LeetCode 155:最小栈
LeetCode 155:最小栈题目描述解题思路代码实现总结题目描述设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minSt...原创 2019-12-23 18:25:54 · 139 阅读 · 0 评论 -
LeetCode 150:逆波兰表达式求值
LeetCode 150:逆波兰表达式求值 题目描述解题思路代码实现总结题目描述根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: [“2”, “1”, “+”, “3”, ...原创 2019-12-23 18:15:24 · 176 阅读 · 0 评论 -
LeetCode 103:二叉树的锯齿形层次遍历
LeetCode 103:二叉树的锯齿形层次遍历 题目描述解题思路代码实现总结题目描述给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层次遍历如下:[[3],[20,9],[15,7]...原创 2019-12-22 23:59:23 · 122 阅读 · 0 评论 -
LeetCode 84:柱状图中最大的矩形
LeetCode 84:柱状图中最大的矩形 题目描述解题思路代码实现总结题目描述给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。解题思路借助栈的结构,需要先向栈底压入-1,依次遍历每个高度不同的柱子,当栈顶柱子的高度高于当前遍历的柱子高度时,可以求一次最大面积,将栈顶弹出,用其高度乘以当前遍历索引减...原创 2019-12-21 21:43:24 · 203 阅读 · 0 评论 -
LeetCode 94:二叉树的中序遍历
LeetCode 94:二叉树的中序遍历 题目描述解题思路代码实现总结题目描述给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]解题思路二叉树的中序遍历:left -->root–>right (左跟右),借助栈结构,我们将每个按顺序遍历的节点,添加到arraylist当中。从二叉树的根节点开始,先将根节点...原创 2019-12-21 21:24:23 · 102 阅读 · 2 评论 -
LeetCode 42:接雨水
LeetCode 42:接雨水 题目描述解题思路代码实现总结题目描述给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。解题思路借助栈的结构来解决,设定指针初始位置为0,在越界的前提下,依次向后移动,在初始及栈顶元素的高度大于当前指针所指高度时,压栈操作,指针后移。当栈不为空且,栈顶元素高度小于当前指针的高度时,将栈顶高度的值存入中间变量,...原创 2019-12-21 21:09:13 · 113 阅读 · 0 评论 -
LeetCode 20:有效的括号
LeetCode 20:有效的括号 题目描述解题思路代码实现总结题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。解题思路借助栈的结构,可以将括号组成的字符串压入栈中,具体实现方法,先用hashmap将括号成...原创 2019-12-21 20:48:44 · 164 阅读 · 0 评论