Leetcode
Leetcode详细题解笔记
Cherils
这个作者很懒,什么都没留下…
展开
-
Leetcode【回溯】| 51. N皇后 & 52. N皇后 II
题目Leetcode 51. N皇后n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例: 输入:4 输出:[ [".Q…", // 解法 1 “…Q”, “Q…”, “…Q.”], ["…Q.", //原创 2020-10-19 21:29:18 · 250 阅读 · 0 评论 -
Leetcode【TopK】| 347. 前 K 个高频元素
Leetcode | 347. 前 K 个高频元素题目解题哈希存储TopK问题解法快排变形堆二叉搜索树计数排序题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]示例 2: 输入: nums = [1], k = 1 输出: [1]提示: 1. 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 2. 你的算法的时间复杂度必须优于 O(n log n)原创 2020-10-05 17:11:46 · 275 阅读 · 1 评论 -
Leetcode【递归 贪心】 | 968. 监控二叉树
题目给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1: 输入:[0,0,null,0,0] 输出:1 解释:如图所示,一台摄像头足以监控所有节点。示例 2: 输入:[0,0,null,0,null,0,null,null,0] 输出:2 解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。解题具体见注释 三种状态的递推/** * Defini原创 2020-09-22 19:44:29 · 192 阅读 · 0 评论 -
十种排序算法详解&Java实现(Leetcode | 912. 排序数组 )
排序算法一、简单选择排序二、直接插入排序三、冒泡排序四、快速排序五、归并排序六、堆排序一、简单选择排序二、直接插入排序三、冒泡排序四、快速排序五、归并排序六、堆排序...原创 2020-09-21 18:11:29 · 512 阅读 · 0 评论 -
Leetcode【搜索回溯】| 47.全排列 II
Leetcode | 47.全排列 II题目解题回溯+决策树标记判断重复题目给定一个可包含重复数字的序列,返回所有不重复的全排列。示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]解题回溯+决策树 该题是Leetcode【回溯框架 递归】| 46. 全排列的进阶版,加了一个条件,即给定序列中有重复的元素。全排列的解决和回溯框架的介绍可以看这篇博文,我们需要额外解决的就是,在决策/选择的时候,如果避免重复? 我初始的想原创 2020-09-18 17:32:06 · 157 阅读 · 0 评论 -
Leetcode【固定左边界+双指针】| 15. 三数之和 & 16. 最接近的三数之和
目录Leetcode | 15. 三数之和题目解题排序+双指针排序+哈希Leetcode | 16. 最接近的三数之和题目解题思路(排序+双指针)Java实现Leetcode | 15. 三数之和题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组原创 2020-06-24 10:00:56 · 184 阅读 · 0 评论 -
Leetcode【动态规划】| 正则表达式匹配
题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1: 输入: s = “aa” p = “a” 输出: false 解释: “a” 无法匹配 “aa” 整个字符串。原创 2020-06-20 18:57:24 · 196 阅读 · 0 评论 -
Leetcode【固定左右边界 前缀和/动态规划】 | 363. 矩形区域不超过K的最大数值和(JAVA详细注释)
题目给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和。示例: 输入: matrix = [[1,0,1],[0,-2,3]], k = 2 输出: 2解释: 矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。说明: 矩阵内的矩形区域面积必须大于 0。 如果行数远大于列数,你将如何解答呢?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problem原创 2020-06-04 19:48:14 · 352 阅读 · 0 评论 -
Leetcode【动态规划】| 837. 新21点
题目爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下:爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得一个整数作为分数进行累计,其中 W 是整数。 每次抽取都是独立的,其结果具有相同的概率。当爱丽丝获得不少于 K 分时,她就停止抽取数字。 爱丽丝的分数不超过 N 的概率是多少?示例 1 输入:N = 10, K = 1, W = 10 输出:1.00000 说明:爱丽丝得到一张卡,然后停止。示例 2: 输入:N =原创 2020-06-03 13:08:24 · 213 阅读 · 0 评论 -
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-06-01 19:13:27 · 165 阅读 · 0 评论 -
Leetcode【快慢指针】| 287. 寻找重复数
题目给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1: 输入: [1,3,4,2,2] 输出: 2示例 2: 输入: [3,1,3,4,2] 输出: 3说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2) 。 数组中只有一个重复的数字,但它可能不止重复出现一次。来源:力扣(LeetCode)链接原创 2020-05-26 21:08:07 · 469 阅读 · 1 评论 -
Leetcode【快慢指针 链表找环思想】| 202. 快乐数
这里写自定义目录标题题目解题思路java实现题目编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例: 输入:19 输出:t...原创 2020-05-26 15:30:00 · 206 阅读 · 0 评论 -
Leetcode【递归】| 105. 从前序与中序遍历序列构造二叉树
题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 /\ 9 20 /\ 15 7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-trav原创 2020-05-22 16:08:01 · 204 阅读 · 0 评论 -
Leetcode【双指针 前缀和 哈希】| 1. 两数之和 & 560. 和为K的子数组 & 974. 和可被 K 整除的子数组
题目给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subarray-sum-equals-原创 2020-05-15 21:41:47 · 337 阅读 · 0 评论 -
Leetcode | 155. 最小栈(java实现)
Leetcode【栈】| 155. 最小栈题目解题题目分析两个栈实现题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。示例:输入: [“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”] [ [], [-2],原创 2020-05-12 18:12:24 · 251 阅读 · 0 评论 -
Leetcode【线性规划】| 221. 最大正方形
题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximal-square解题思路可以把这个二维矩阵问题想象成直方图问题,就和很多已做过的柱状图问题类似了。把值为1的想象为柱状图。如示例二维矩阵可想象为如下:.原创 2020-05-08 21:55:33 · 547 阅读 · 0 评论 -
Leetcode【递归】| 572. 另一个树的子树
题目给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1: 给定的树 s: 3 /\ 4 5 /\ 1 2 给定的树 t: 4 /\ 1 2 返回 true,因为 t 与 s 的一个子树...原创 2020-05-07 17:40:44 · 140 阅读 · 0 评论 -
Java实现二叉树的先序遍历、中序遍历、后序遍历和层序遍历(Leetcode 94、102、144、145题)
二叉树的先序遍历、中序遍历、后序遍历和层序遍历先序遍历(Leetcode 144)中序遍历(Leetcode 94)后序遍历(Leetcode 145)层序遍历(Leetcode 102) 树的先序遍历、中序遍历和后序遍历其实就是树的dfs深度优先遍历方式,只是在深度优先的基础上,左孩子、右孩子和根节点遍历的前后顺序不同罢了。DFS实现有递归实现和栈实现两种,所以这三种遍历方法也分别有这两种实现...原创 2020-05-06 19:30:39 · 590 阅读 · 0 评论 -
Leetcode【动态规划】| 983. 最低票价
题目在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式: 一张为期一天的通行证售价为 costs[0] 美元; 一张为期七天的通行证售价为 costs[1] 美元; 一张为期三十天的通行证售价为 costs[2] 美元。通行证允许数天无限制的...原创 2020-05-06 15:00:11 · 273 阅读 · 0 评论 -
Leetcode【中序遍历 递归】| 98. 验证二叉搜索树
题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1: 输入: 2 /\ 1 3 输出: true示例 2: 输入: 5 /\ 1 4 /\ 3 6 ...原创 2020-05-05 21:55:02 · 405 阅读 · 0 评论 -
Leetcode【贪心】| 45. 跳跃游戏 II
题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例: 输入: [2,3,1,1,4] 输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明: 假设你总是可以到达数组的最后一个位置...原创 2020-05-04 17:00:47 · 203 阅读 · 0 评论 -
Leetcode | 21. 合并两个有序链表 (java)
Leetcode | 21. 合并两个有序链表 题目解题思路递归实现迭代实现题目将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-...原创 2020-05-01 10:25:52 · 196 阅读 · 0 评论 -
Leetcode【二分查找】| 1095. 山脉数组中查找目标值
Leetcode | 1095. 山脉数组中查找目标值题目解题思路java实现题目这是一个 交互式问题给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值。如果不存在这样的下标 index,就请返回 -1。何为山脉数组?如果数组 A 是一个山脉数组的话,那它满足如下条件:首先,A....原创 2020-04-29 10:44:00 · 276 阅读 · 0 评论 -
Leetcode【异或 位运算】| 面试题56 - I. 数组中数字出现的次数(java详细注释版)& 260. 只出现一次的数字 III
Leetcode | 面试题56 - I. 数组中数字出现的次数题目解题基础(位运算介绍)解题思路java实现题目一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1: 输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1]示例 2: 输入:nums = [1,...原创 2020-04-28 16:17:01 · 283 阅读 · 0 评论 -
Leetcode【二分查找】| 33. 搜索旋转排序数组
Leetcode | 33. 搜索旋转排序数组题目解题思路直接二分查找法递归实现非递归实现将旋转数组查找变为有序数组查找题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。...原创 2020-04-27 14:23:24 · 230 阅读 · 0 评论 -
Leetcode【分治 链表】| 23. 合并K个排序链表
Leetcode | 23. 合并K个排序链表题目解题顺序依次合并合并2链表递归实现合并2链表迭代实现两两成对合并(分治)题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4-...原创 2020-04-26 21:19:48 · 213 阅读 · 0 评论 -
Leetcode【回溯框架 递归】| 46. 全排列
Leetcode | 46. 全排列题目解题动态规划递归回溯 决策树题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr...原创 2020-04-25 22:28:38 · 187 阅读 · 0 评论 -
Leetcode【分治 归并排序】| 面试题51. 数组中的逆序对
Leetcode | 面试题51. 数组中的逆序对题目解题暴力解法分治思想 归并排序思路java实现题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1: 输入: [7,5,6,4] 输出: 5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sh...原创 2020-04-24 22:02:59 · 338 阅读 · 0 评论 -
Leetcode【动态规划】| 面试题 08.11. 硬币
Leetcode | 面试题 08.11. 硬币题目解题动态规划思路java实现优化数学思路题目给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1: 输入: n = 5 输出:2 解释: 有两种方式可以凑成总金额: 5=5 5=1+1+1+1+1示例2: 输入: n =...原创 2020-04-23 22:26:12 · 383 阅读 · 0 评论 -
Leetcode【树 DFS BFS】| 199. 二叉树的右视图
Leetcode | 199. 二叉树的右视图题目解题DFS解法BFS解法题目给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例: 输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 <— / 2 3 <— \ ...原创 2020-04-22 12:23:19 · 227 阅读 · 0 评论 -
Leetcode【滑动窗口 双指针】| 1248. 统计「优美子数组」
Leetcode| 1248. 统计「优美子数组」题目解题思路(其实是种滑动窗口的思想)java实现优化上述题解的优化双指针解法题目给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。 示例 1: 输入:nums = [1,1,2,1,1], k = 3 输出:2...原创 2020-04-21 12:54:39 · 232 阅读 · 0 评论 -
Leetcode【DFS BFS】| 200. 岛屿数量(java详细注释版)
Leetcode | 200. 岛屿数量题目解题思路DFS解法BFS解法题目给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1: 输入: 11110 11010 11000 00000 输出: 1示例 2:...原创 2020-04-20 15:21:54 · 498 阅读 · 0 评论 -
Leetcode【双指针】| 11. 盛最多的容器
Leetcode | 11. 盛最多的容器题目解题暴力解法双指针解法思路双指针的正确性证明java实现优化题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。**说明:**你不能倾斜容器,且 n...原创 2020-04-18 17:01:44 · 159 阅读 · 0 评论 -
Leetcode【贪心】| 55. 跳跃游戏
Leetcode【贪心】| 55. 跳跃游戏题目解题思路java实现优化贪心解法动态规划另一种思路(用到队列)题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳...原创 2020-04-17 15:45:44 · 198 阅读 · 0 评论 -
Leetcode【数组 贪心】| 56. 合并区间
Leetcode | 56. 合并区间题目解题思路算法思想java实现优化题目给出一个区间的集合,请合并所有重叠的区间。示例 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...原创 2020-04-16 14:56:51 · 445 阅读 · 0 评论 -
Leetcode【栈 链表】| 445. 两数相加 II
Leetcode | 445. 两数相加 II题目解题思路实现题目给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -&g...原创 2020-04-14 21:45:55 · 119 阅读 · 0 评论 -
Leetcode【DFS BFS 数组 队列】| 面试题13. 机器人的运行范围
Leetcode | 面试题13. 机器人的运行范围题目解题DFS解法递推解法题目解题DFS解法递推解法原创 2020-04-14 21:36:31 · 158 阅读 · 0 评论 -
Leetcode【数组/栈/动态规划/双指针】 | 42.Trapping Rain Water 接雨水问题
Leetcode | 42.Trapping Rain Water 接雨水题目解题暴力解法思路代码动态规划(对暴力解法的改进)思路代码双指针思路代码单调栈思路代码题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部...原创 2020-04-07 22:02:07 · 224 阅读 · 0 评论 -
Leetcode【二维数组】 | 48.Rotate Image 旋转图像/矩阵
Leetcode | 48. 旋转矩阵题目解题直接原地旋转思路代码翻转代替旋转思路代码题目给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,...原创 2020-04-07 16:29:57 · 303 阅读 · 0 评论 -
Leetcode【二维数组】 | 36. Valid Sudoku有效的数独
题目判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。1、数字 1-9 在每一行只能出现一次。2、数字 1-9 在每一列只能出现一次。3、数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 :输入:[[“5”,“3”,".",".",“7”,".",".",".","."],...原创 2020-04-05 23:07:31 · 206 阅读 · 0 评论