![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣刷题
文章平均质量分 58
litanyuan
这个作者很懒,什么都没留下…
展开
-
单调队列算法总结
单调队列算法总结原创 2022-12-07 13:08:45 · 829 阅读 · 0 评论 -
LeetCode-757. 设置交集大小至少为2,贪心算法的使用
LeetCode-757. 设置交集大小至少为2,贪心算法的使用原创 2022-07-22 11:04:10 · 231 阅读 · 0 评论 -
LeetCode-732. 我的日程安排表 III,差分数组
差分数组的应用原创 2022-06-06 10:52:55 · 1204 阅读 · 0 评论 -
LeetCode-剑指 Offer II 114. 外星文字典,BFS 搜索算法及图的表示
LeetCode-剑指 Offer II 114. 外星文字典,图的表示方法、BFS算法原创 2022-05-31 12:59:52 · 127 阅读 · 0 评论 -
LeetCode-380. O(1) 时间插入、删除和获取随机元素
STL综合应用原创 2022-04-13 12:59:46 · 304 阅读 · 0 评论 -
LeetCode-1606. 找到处理最多请求的服务器、C++中优先队列的使用
LeetCode-1606. 找到处理最多请求的服务器、C++中优先队列的使用原创 2022-03-31 13:55:44 · 519 阅读 · 0 评论 -
LeetCode-917. 仅仅反转字母
双指针、左右指针原创 2022-02-23 12:46:14 · 383 阅读 · 0 评论 -
LeetCode-688. 骑士在棋盘上的概率
LeetCode-688. 骑士在棋盘上的概率 深度优先算法原创 2022-02-18 13:25:44 · 352 阅读 · 0 评论 -
LeetCode-1447. 最简分数、gcd的C++函数实现
力扣刷题、gcd函数实现原创 2022-02-10 16:29:41 · 679 阅读 · 0 评论 -
LeetCode-135.分发糖果、贪心算法
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入: [1,2,2]输出: 4解释: 你可以分别给这三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 .原创 2020-12-24 08:26:59 · 214 阅读 · 0 评论 -
LeetCode-376.摆动序列、贪心算法
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元素.原创 2020-12-12 16:47:46 · 144 阅读 · 0 评论 -
LeetCode-321.拼接最大数、单调栈
给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。说明: 请尽可能地优化你算法的时间和空间复杂度。示例 1:输入:nums1 = [3, 4, 6, 5]nums2 = [9, 1, 2, 5, 8, 3]k = 5输出:[9, 8, 6, .原创 2020-12-02 10:39:06 · 314 阅读 · 0 评论 -
LeetCode-493. 翻转对、归并排序
给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。你需要返回给定数组中的重要翻转对的数量。示例 1:输入: [1,3,2,3,1]输出: 2来源:力扣(LeetCode)题目分析如果 i 、j 分别属于两个有序区间,并且 nums[i] > 2*nums[j] ,则大于 i 的元素也都满足需求,利用有序特点可以减少重复的比较操作。归并排序将两个有序的数组合并成一个有序数组称为归并。归并排.原创 2020-11-28 09:30:30 · 285 阅读 · 0 评论 -
LeetCode-450.删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。来源:力扣(LeetCode)题目分析①.二叉搜索树的性质:左子树的节点值都小于根节点值;右子树的节点值都大于根节点值②.若为叶子节点,则直接删除即可,不影响二叉搜索树的性质③.若只有一.原创 2020-11-19 11:19:58 · 107 阅读 · 0 评论 -
LeetCode-327.区间和的个数、归并排序
给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper。区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。说明:最直观的算法复杂度是 O(n2) ,请在此基础上优化你的算法。示例:输入: nums = [-2,5,-1], lower = -2, upper = 2,输出: 3解释: 3个区间分别是: [0,0], [2,2], [0,2],它们表示的和分别为: -2,.原创 2020-11-07 11:10:59 · 278 阅读 · 0 评论 -
LeetCode-1024.视频拼接、贪心算法
你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, T])。返回所需片段的最小数目,如果无法完成该任务,则返回 -1 .原创 2020-10-24 10:08:49 · 7105 阅读 · 0 评论 -
LeetCode-763.划分字母区间、双指针
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1:输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。来源:力扣(LeetCode).原创 2020-10-22 08:49:45 · 127 阅读 · 0 评论 -
LeetCode-143.重排链表
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.来源:力扣(LeetCode)方法一本题最直接的方法把.原创 2020-10-20 09:32:01 · 176 阅读 · 0 评论 -
LeetCode-116.填充每个节点的下一个右侧节点指针、深度优先搜索
题目分析①.广度优先搜索题目要求把二叉树中每一层的的节点连起来,最简单的方法即 BFS ,按层的顺序的对树进行遍历,但需要使用 queue 数据结构,空间复杂度为 O(N),不符合题目要求。②.深度优先搜索由于 next 指针的存在,可以实现对二叉树进行从上往下从左到右的遍历,每个节点的 next 指针在遍历其父节点时进行赋值;当遍历到每一个节点时:把其左子节点和右子节点进行关联、右子节点和其下个节点的左子节点进行关联。深度优先搜索深度优先搜索(DFS)就是在每一步时对每一种可能的选择一条...原创 2020-10-15 15:06:17 · 122 阅读 · 0 评论 -
LeetCode-47.全排列Ⅱ、深度优先搜索
深度优先搜索深度优先搜索(DFS)就是在每一步时对每一种可能的选择一条道走到底,然后再回过头尝试另外一种选择。深度优先搜索的关键是要考虑“当前这一步”该如何做,至于“下一步”该怎么做和当前这一步的解决方法是一样的。在进行当前步的选择之前要确定已经做出的选择列表,然后在剩余可供选择的每一种可能进行遍历,对于每一种选择将选择结果以及选择状态代入下一步操作,然后再次进行深度优先搜索。DFS 实现DFS的实现考虑要以下几个问题即可:①.边界范围:即搜索终止条件,递归结束条件。②.可供选择的范围列表:所.原创 2020-09-18 17:32:41 · 139 阅读 · 0 评论 -
LeetCode-214.最短回文串、KMP算法字符串匹配
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。示例 1:输入: “aacecaaa”输出: “aaacecaaa”示例 2:输入: “abcd”输出: “dcbabcd”来源:力扣(LeetCode)题目分析s1 表示 s 的反转字符串。题目可以转换为查找 s1 的后缀和 s 的前缀最长重合的部分,即用 s 去匹配 s1 即可,s 的匹配剩余部分加到 s1 末尾即可。代码示例class Solution {publ.原创 2020-08-29 16:38:12 · 404 阅读 · 0 评论 -
LeetCode-491.递增子序列、深度优先搜索算法DFS
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明:给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。来源:力扣(LeetCode)第491题解题思路生成子序列生成.原创 2020-08-25 09:41:54 · 247 阅读 · 0 评论 -
LeetCode-679.24 点游戏、深度优先搜索算法DFS
来源:力扣(LeetCode)题目分析括号运算符仅仅表达了一个运算顺序,可以不用考虑,实际的运算类型就 4 种。一共只有 4 个数,因此所有组合的可能性是有限的。DFS 算法就是对当前的所有可能的操作进行枚举:当前的操作即从可选的数字中挑 2 个进行每种运算的尝试。代码示例constexpr double ex = 1e-6;//精度constexpr double tag = 24;//目标值class Solution {public: bool judgePoint2..原创 2020-08-24 15:19:22 · 466 阅读 · 0 评论 -
LeetCode-109.有序链表转换二叉搜树
二叉搜索树二叉查找树又称二叉搜索树或者二叉排序树;它可以是一个空树或者是一个二叉树,既有链表的快速插入与删除的特点,又有数组快速查找的优势。具有以下性质:①.若左子树非空,则左子树所有节点均小于根节点的值;②.若右子树非空,则右子树所有节点均大于根节点的值;③.左右子树也是二叉查找树;④.没有键值相等的节点。快慢指针快慢指针是两个指针同向移动,某一时刻来看两个指针一个在前,一个在后,即快指针和慢指针。造成两个指针一前一后的原因有两种情况:①.两个指针速度相同,但是出发时间不同,也可以认为是.原创 2020-08-18 17:07:34 · 108 阅读 · 0 评论 -
LeetCode-130.被包围的区域、广度优先搜索
来源:力扣(LeetCode)第130题BFS 算法广度优先搜索(BFS)的本质就是从源点出发,按层顺序进行遍历,把每一层的所有节点访问完后再转到下一层;使用队列(queue)来记录将要访问的点,访问完每个点就出队,然后把它的邻近点入队;同时要记录哪些点被访问过以避免重复访问。对边界上的 O 进行 BFS 搜索,从而标记所有和边界相连的 O,然后再进行替换即可题目分析因为边界以及和边界相连的 O 不能被替换,可以对所有边界上的 O 进行广度优先搜索找到所有与其相连的 O 并做标记即可。..原创 2020-08-11 16:23:11 · 270 阅读 · 0 评论 -
LeetCode-336.回文对、字典树、字符串翻转
给定一组唯一的单词, 找出所有不同 的索引对(i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串。示例 1:输入: [“abcd”,“dcba”,“lls”,“s”,“sssll”]输出: [[0,1],[1,0],[3,2],[2,4]]解释: 可拼接成的回文串为 [“dcbaabcd”,“abcddcba”,“slls”,“llssssll”]来源:力扣(LeetCode)第336题字典树概念字典树又称单词查找树、前缀树,是一种树形结构,利.原创 2020-08-06 10:09:18 · 312 阅读 · 0 评论 -
LeetCode-207.课程表、广度优先搜索、图的邻接列表表示
你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?来源:力扣(LeetCode)第207题题目分析要学习一门课程则必须学习完其所有的先决条件课程,即可以用有向图来描述这种依赖关系,节点间的连接关系不对等。当前可以上的课即为不依赖于任何一门剩下未学习的课的课,即图中.原创 2020-08-04 08:15:45 · 152 阅读 · 0 评论 -
LeetCode-114.二叉树展开为链表
来源:力扣(LeetCode)第114题解题思路根据题意,对每个节点作如下操作:①.把其左儿子位置变成nullptr②.其左儿子变换后放到右儿子的位置③.把右儿子变换后挂到左儿子变换后的末尾节点的右儿子位置然后从根节点开始直接递归即可,基线条件是没有任何儿子节点直接返回自身代码示例/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; ..原创 2020-08-03 18:52:27 · 174 阅读 · 0 评论 -
LeetCode-410.最小区间、滑动窗口、双指针
你有 k 个升序排列的整数数组。找到一个最小区间,使得 k 个列表中的每个列表至少有一个数包含在其中。我们定义如果 b-a < d-c 或者在 b-a == d-c 时 a < c,则区间 [a,b] 比 [c,d] 小。示例 1:输入:[[4,10,15,24,26], [0,9,12,20], [5,18,22,30]]输出: [20,24]解释:列表 1:[4, 10, 15, 24, 26],24 在区间 [20,24] 中。列表 2:[0, 9, 12, 20],20 .原创 2020-08-01 11:16:08 · 190 阅读 · 0 评论 -
LeetCode-343.整数拆分、记忆化递归
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。力扣(LeetCode)第343题题目分析①.暴力枚举一个正整数 n 拆分成两个数,可用枚举所有情况,1+n-1、2+n-2、…、i+(n-i) 、(n-1)+1,比较每种情况相乘的结果即最终的值;对于每种情况:i+(n-i),比较 (n-i) 和 (n-i) 继续拆分得到值的大小来确定是否拆分。②.ma.原创 2020-07-30 15:48:37 · 219 阅读 · 0 评论 -
LeetCode-410.分隔数组的最大值、动态规划、前缀和
给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。示例:输入:nums = [7,2,5,10,8],m = 2,输出:18力扣(LeetCode)第410题前言前缀和前缀和是一个数组的某项下标之前(包括该元素)的所有数组元素的和,前缀和是一种重要的预处理操作,可以降低查询的时间复杂度。主要用于使用O(1)的时间,计算出子区间和。动态规划动态规划算法通常用于求解具有某种最优性质的问题,其基本思想也是将待求解.原创 2020-07-25 17:31:20 · 343 阅读 · 0 评论 -
LeetCode-312.戳气球、动态规划
有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。来源:力扣(LeetCode)第312题暴力穷举①.回溯算法对于求最值的问题,最直接的.原创 2020-07-20 16:11:15 · 402 阅读 · 0 评论 -
力扣刷题-面试题 17.13. 恢复空格、字典树、前缀树的应用
基本概念Trie 树又称单词查找树、前缀树,是一种树形结构。典型应用是用于统计、排序和保存大量的字符串(但不仅限于字符串)。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,比哈希表更快。基本性质①.根节点不包含字符,除根节点外每个节点都只包含一个字符②.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串③.每个节点的所有子节点包含的字符都不相同基本操作①.插入:把一个单词插入到字典树②.查询前缀:判断某个单词是否为一个单词的前缀原创 2020-07-13 16:19:00 · 229 阅读 · 0 评论 -
LeetCode-801.使序列递增的最小交换次数、动态规划的使用总结
我们有两个长度相等且不为空的整型数组 A 和 B 。我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < … < A[A.length - 1])。给定数组 A 和 B ,请返回使得两个数组均保持严格递增状态的最小交换次数。假设给定的输入总是有效的。示例: 输入: A = [1,3,5,4], B = [1,2,3,7].原创 2020-07-12 11:11:33 · 344 阅读 · 0 评论 -
LeetCode-315.计算右侧小于当前元素的个数、归并排序
给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质:counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例: 输入: [5,2,6,1] 输出: [2,1,1,0]力扣(LeetCode)第315题归并排序将两个有序的数组合并成一个有序数组称为归并。归并排序包含了两个过程: ①:从上往下的分解:把当前区间一分为二,直至分解为若干个长度为1的子数组 ②:从下往上的合并:两个有序的子区域两两向上合并 如下图所示:.原创 2020-07-11 16:29:39 · 783 阅读 · 0 评论 -
LeetCode-378.有序矩阵中第k小的元素、二分查找
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。力扣(LeetCode)第378题值域范围 由于矩阵内元素是从左上到右下递增的,则矩阵中元素的最小值 left 为 matrix[0][0] ,最大值 right 为 matrix[mat.原创 2020-07-06 17:47:50 · 540 阅读 · 0 评论 -
LeetCode-44.通配符匹配、动态规划算法的应用
动态规划算法的应用原创 2020-07-05 19:03:06 · 163 阅读 · 0 评论 -
力扣刷题-1300. 转变数组后最接近目标值的数组和
给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。请注意,答案不一定是 arr 中的数字。来源:力扣(LeetCode)value 的取值范围①.最小值 value 的最小值为 0。因为当 value = 0 时,数组的和为 0,当 value 继续减.原创 2020-06-14 09:56:14 · 217 阅读 · 0 评论 -
力扣刷题-128.最长连续序列、并查集
一.并查集 顾名思义:并:就是合并,查:就是查找,集:就是集合。并查集是一种树形的数据结构,支持以下两种操作:查找:确定某个元素处于哪个子集合并:将两个子集合并成一个集合初始化集合就是一些具有相同特征的元素构成的圈子,然后用其中某个元素作为整个圈子的代表。如上图所示:初始的时候每个元素各自构成一个集合,自己为自己代言。合并可以用树形结构来表示整个集合,每个元素代表一个节点,用根节点代表整个集合。合并两个元素就是对两个元素所在的集合进行合并,即直接把一个集合的根节点作为另外一个集合根原创 2020-06-12 15:58:19 · 525 阅读 · 0 评论 -
力扣刷题-837.新21点、动态规划、滑动窗口
爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下:爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得一个整数作为分数进行累计,其中 W 是整数。 每次抽取都是独立的,其结果具有相同的概率。当爱丽丝获得不少于 K 分时,她就停止抽取数字。 爱丽丝的分数不超过 N 的概率是多少?示例 1:输入:N = 10, K = 1, W = 10输出:1.00000说明:爱丽丝得到一张卡,然后停止。示例 2:输入:N = 6, K =.原创 2020-06-04 11:57:36 · 352 阅读 · 0 评论