LeetCode刷题
文章平均质量分 65
WALL-SQ
Something we got, something we lost
展开
-
2379. 得到 K 个黑块的最少涂色次数
试想一下,我们想要花更少的步数得到更长的连续黑块区间,应该考虑尽可能长的黑色块向两边扩展、或者是对于短的白色块。思路:本道题一个很直观的思路是枚举,针对所有的白色块进行枚举,我们可以将所有的白块当成一个状态为0的状态,将状态1视为黑块,然后统计变化多少块可以有k个连续黑块。其实我们没有必要非要考虑区间的起点终点,换种方式考虑问题,假设我们现在有了0-i区间上所有色块都是黑色需要的最少操作数。,此时我们想要知道i+1-j的块都变为黑色的最少操作数,只需要对这两个区间做减法即可,即。所以我们返回 0。原创 2023-03-09 14:47:15 · 346 阅读 · 0 评论 -
1247. 交换字符使得字符串相同
举例来说,一个xy模式,要么使用另一个xy模式与之采用一步交换消去,要么使用yx模式与之采用两步交换消去,如果只有一个xy模式,是没有办法消去的。思路:首先需要明确的一点是,如果对于索引idx,s1[idx]==s2[idx]的情况下,我们是不用动的,这样才符合我们需要的最小交换次数的要求。如上图所示,在这种情况下,可以交换s1[idx_1]与s2[idx_2]或者交换s1[idx_2]与s2[idx_1],即将两个xy进行一次置换可以消去两个xy模式。,你需要通过「交换字符」的方式使这两个字符串相同。原创 2023-02-28 14:03:55 · 386 阅读 · 0 评论 -
1144. 递减元素使数组呈锯齿状
不管是每个偶数索引对应的元素都大于相邻的元素还是每个奇数索引对应的元素都大于相邻的元素,绕不开的一个问题就是如何让一个位置的数nums[i]比两边小,实际上等价于比两边值中更小的那个还小,而最小操作数意味着我们尽可能少地减少nums[i],那么在最少操作次数下的目标值为min(nums[i-1],nums[i+1]) - 1,操作步数为nums[i] - ( min(nums[i-1],nums[i+1])-1 )。每个奇数索引对应的元素都大于相邻的元素)分别计算一下操作步数,取小即可啦。原创 2023-02-28 00:42:09 · 165 阅读 · 0 评论 -
1658. 将 x 减到 0 的最小操作数
将 x 减到 0 的最小操作数原创 2023-01-07 12:49:31 · 898 阅读 · 0 评论 -
775. 全局倒置与局部倒置
逆序对问题原创 2022-11-16 11:09:28 · 326 阅读 · 0 评论 -
864. 获取所有钥匙的最短路径
状态压缩BFS原创 2022-11-10 21:05:27 · 531 阅读 · 0 评论 -
C++那些你可能不知道的坑/神奇
无原创 2022-11-10 00:20:11 · 650 阅读 · 0 评论 -
764. 最大加号标志
动态规划原创 2022-11-09 16:11:33 · 356 阅读 · 0 评论 -
面试题 17.19. 消失的两个数字
面试题 17.19. 消失的两个数字原创 2022-09-26 16:20:41 · 531 阅读 · 0 评论 -
652. 寻找重复的子树
还没完,本题中强调了子树,子树的叶子在原树上也必须是叶子,而且我们很容易发现递归性质--要想判断大一点的结构是否相同,就要先看小一点的结构是否相同,而DFS的返回顺序正好就符合了这一条性质;现在我们来看看怎么去快速查找树中的相似子树结构,实际上上面也提到了,树的结构可以用序列化结果表示,那么我们只需要获取所有的子树,再使用他们的序列化结果进行查询即可。本题的题意就是输出所有重复子树的根节点,需要注意的是,对于一组重复的子树,输出其中任意一个根即可。原创 2022-09-05 14:51:36 · 614 阅读 · 0 评论 -
386. 字典序排数
386. 字典序排数难度中等288给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。示例 1:输入:n = 13输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]示例 2:输入:n = 2输出:[1,2]提示:1 <= n <= 5 * 10^4思路:假设我们现在有一个按序生成的满足条件的数number,生成下一个数的时候,为了使得字典序最小,原创 2022-04-18 15:21:47 · 614 阅读 · 0 评论 -
1984. 学生分数的最小差值
1984. 学生分数的最小差值难度简单58给你一个下标从 0 开始的整数数组nums,其中nums[i]表示第i名学生的分数。另给你一个整数k。从数组中选出任意k名学生的分数,使这k个分数间最高分和最低分的差值达到最小化。返回可能的最小差值。示例 1:输入:nums = [90], k = 1输出:0解释:选出 1 名学生的分数,仅有 1 种方法:- [90] 最高分和最低分之间的差值是 90 - 90 = 0可能的最小差值是...原创 2022-02-11 18:12:02 · 1059 阅读 · 0 评论 -
1001. 网格照明
在解决这个问题前,我们先弱化一下题目难度,找找思路假设现在我们可以认为lamps中不会存在重复的元素(即不会有一个位置存在灯这个情况出现两次),同时假设queries[j]之后不会进行灭灯的操作。思路一:首先读题,一个亮的灯泡可以同时点亮其所在行、列、主副对角线上的位置。值得注意的是,一个位置亮的条件是只需要有一个灯泡照亮它即可;也就是说一个位置可能会被多个灯泡点亮。朴素的思路是我们开一个数组lighted_num[i][j]用于记录位置(i,j)被点亮的次数,当某一个灯泡亮的时候,将其同行、列、主原创 2022-02-08 19:39:14 · 1059 阅读 · 0 评论 -
1219. 黄金矿工
1219. 黄金矿工难度中等182收藏分享切换为英文接收动态反馈你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为m * n的网格grid进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是0。为了使收益最大化,矿工需要按以下规则来开采黄金:每当矿工进入一个单元,就会收集该单元格中的所有黄金。 矿工每次可以从当前位置向上下左右四个方向走。 每个单元格只能被开采(进入)一次。 不得开采(进入)黄金数目为0的单元格。...原创 2022-02-06 00:59:57 · 724 阅读 · 0 评论 -
2013. 检测正方形
2013. 检测正方形难度中等给你一个在 X-Y 平面上的点构成的数据流。设计一个满足下述要求的算法:添加一个在数据流中的新点到某个数据结构中。可以添加重复的点,并会视作不同的点进行处理。 给你一个查询点,请你从数据结构中选出三个点,使这三个点和查询点一同构成一个面积为正的轴对齐正方形,统计满足该要求的方案数目。轴对齐正方形是一个正方形,除四条边长度相同外,还满足每条边都与 x-轴 或 y-轴 平行或垂直。实现DetectSquares类:DetectSquar...原创 2022-01-28 23:15:26 · 1167 阅读 · 0 评论 -
1765. 地图中的最高点
1765. 地图中的最高点难度中等63收藏分享切换为英文接收动态反馈给你一个大小为m x n的整数矩阵isWater,它代表了一个由陆地和水域单元格组成的地图。如果isWater[i][j] == 0,格子(i, j)是一个陆地格子。 如果isWater[i][j] == 1,格子(i, j)是一个水域格子。你需要按照如下规则给每个单元格安排高度:每个格子的高度都必须是非负的。 如果一个格子是是水域,那么它的高度必须为0。 任意相邻的格...原创 2022-01-29 18:03:16 · 498 阅读 · 0 评论 -
1688. 比赛中的配对次数
1688. 比赛中的配对次数难度简单58给你一个整数n,表示比赛中的队伍数。比赛遵循一种独特的赛制:如果当前队伍数是偶数,那么每支队伍都会与另一支队伍配对。总共进行n / 2场比赛,且产生n / 2支队伍进入下一轮。 如果当前队伍数为奇数,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行(n - 1) / 2场比赛,且产生(n - 1) / 2 + 1支队伍进入下一轮。返回在比赛中进行的配对次数,直到决出获胜队伍为止。示例 1:输入:n = ...原创 2022-01-28 21:52:06 · 6655 阅读 · 0 评论 -
1996. 游戏中弱角色的数量
1996. 游戏中弱角色的数量难度中等73收藏分享切换为英文接收动态反馈你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击和防御。给你一个二维整数数组properties,其中properties[i] = [attacki, defensei]表示游戏中第i个角色的属性。如果存在一个其他角色的攻击和防御等级都严格高于该角色的攻击和防御等级,则认为该角色为弱角色。更正式地,如果认为角色i弱于存在的另一个角色j,那么attack[j] > atta...原创 2022-01-28 13:54:41 · 465 阅读 · 0 评论 -
1332. 删除回文子序列
1332. 删除回文子序列难度简单126收藏分享切换为英文接收动态反馈给你一个字符串s,它仅由字母'a'和'b'组成。每一次删除操作都可以从s中删除一个回文子序列。返回删除给定字符串中所有字符(字符串为空)的最小删除次数。「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。示例 1:输入:s = "ababa"输出...原创 2022-01-22 15:22:45 · 1399 阅读 · 0 评论 -
1220. 统计元音字母序列的数目
1220. 统计元音字母序列的数目难度困难给你一个整数n,请你帮忙统计一下我们可以按下述规则形成多少个长度为n的字符串:字符串中的每个字符都应当是小写元音字母('a','e','i','o','u') 每个元音'a'后面都只能跟着'e' 每个元音'e'后面只能跟着'a'或者是'i' 每个元音'i'后面不能再跟着另一个'i' 每个元音'o'后面只能跟着'i'或者是'u' 每个元音'u'后面只能跟着'a'由于答案可能会很大,所以请你...原创 2022-01-17 17:37:39 · 505 阅读 · 0 评论 -
334. 递增的三元子序列
334. 递增的三元子序列难度中等464给你一个整数数组nums,判断这个数组中是否存在长度为3的递增子序列。如果存在这样的三元组下标(i, j, k)且满足i < j < k,使得nums[i] < nums[j] < nums[k],返回true;否则,返回false。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例 2:输入:...原创 2022-01-12 17:23:40 · 746 阅读 · 0 评论 -
剑指 Offer II 035. 最小时间差
剑指 Offer II 035. 最小时间差难度中等5给定一个 24 小时制(小时:分钟"HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。示例 1:输入:timePoints = ["23:59","00:00"]输出:1示例 2:输入:timePoints = ["00:00","23:59","00:00"]输出:0提示:2 <= timePoints.size() <= 2 * 10^4 timePoints[i].原创 2021-12-23 19:33:04 · 472 阅读 · 0 评论 -
1044. 最长重复子串
1044. 最长重复子串难度困难220给你一个字符串s,考虑其所有重复子串:即,s的连续子串,在s中出现 2 次或更多次。这些出现之间可能存在重叠。返回任意一个可能具有最长长度的重复子串。如果s不含重复子串,那么答案为""。示例 1:输入:s = "banana"输出:"ana"示例 2:输入:s = "abcd"输出:""提示:2 <= s.length <= 3 * 104 s由小写英文字母组成分析:对于这种寻找...原创 2021-12-23 16:48:57 · 986 阅读 · 0 评论 -
剑指 Offer II 037. 小行星碰撞
剑指 Offer II 037. 小行星碰撞难度中等11给定一个整数数组asteroids,表示在同一行的小行星。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。找出碰撞后剩下的所有小行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。示例 1:输入:asteroids = [5,10,-5]输出:[5,.原创 2021-12-21 19:01:26 · 528 阅读 · 0 评论 -
剑指 Offer II 022. 链表中环的入口节点
剑指 Offer II 022. 链表中环的入口节点难度中等给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着next指针进入环的第一个节点为环的入口节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。注意,pos仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。示例 1:输入:head = [3...原创 2021-12-21 18:49:21 · 488 阅读 · 0 评论 -
516. 最长回文子序列
516. 最长回文子序列难度中等给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例 1:输入:s = "bbbab"输出:4解释:一个可能的最长回文子序列为 "bbbb" 。示例 2:输入:s = "cbbd"输出:2解释:一个可能的最长回文子序列为 "bb" 。提示:1 <= s.length <= 1000 s仅由小写英文字母组...原创 2021-12-20 20:02:16 · 321 阅读 · 0 评论 -
剑指 Offer II 017. 含有所有字符的最短字符串
剑指 Offer II 017. 含有所有字符的最短字符串难度困难给定两个字符串s和t。返回s中包含t的所有字符的最短子字符串。如果s中不存在符合条件的子字符串,则返回空字符串""。如果s中存在多个符合条件的子字符串,返回任意一个。注意:对于t中重复字符,我们寻找的子字符串中该字符数量必须不少于t中该字符数量。示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC" 解释:最短子字符串 "BANC" 包...原创 2021-12-20 19:12:39 · 630 阅读 · 0 评论 -
419. 甲板上的战舰
419. 甲板上的战舰难度中等162给你一个大小为m x n的矩阵board表示甲板,其中,每个单元格可以是一艘战舰'X'或者是一个空位'.',返回在甲板board上放置的战舰的数量。战舰只能水平或者垂直放置在board上。换句话说,战舰只能按1 x k(1行,k列)或k x 1(k行,1列)的形状建造,其中k可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。示例 1:输入:board = [["X","...原创 2021-12-18 15:00:31 · 678 阅读 · 0 评论 -
动态规划-跳跃游戏
55. 跳跃游戏给定一个非负整数数组nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 ...原创 2021-11-21 16:37:27 · 3052 阅读 · 0 评论 -
559. N 叉树的最大深度
559. N 叉树的最大深度给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:3示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,原创 2021-11-21 12:21:02 · 665 阅读 · 0 评论 -
594. 最长和谐子序列
594. 最长和谐子序列难度简单225和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。现在,给你一个整数数组nums,请你在所有可能的子序列中找到最长的和谐子序列的长度。数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。示例 1:输入:nums = [1,3,2,2,5,2,3,7]输出:5解释:最长的和谐子序列是 [3,2,2,2,3]示例 2:输入:nums = [1,2,3,4]...原创 2021-11-20 12:50:32 · 492 阅读 · 0 评论 -
397. 整数替换
397. 整数替换给定一个正整数 n ,你可以做如下操作: 如果 n 是偶数,则用 n / 2替换 n 。 如果 n 是奇数,则可以用 n + 1或n - 1替换 n 。n 变为 1 所需的最小替换次数是多少?示例 1:输入:n = 8输出:3解释:8 -> 4 -> 2 -> 1示例 2:输入:n = 7输出:4解释:7 -> 8 -> 4 -> 2 -> 1或 7 -> 6 -> 3 -> 2...原创 2021-11-19 12:45:18 · 1260 阅读 · 0 评论 -
动态规划-打家劫舍
198. 打家劫舍难度中等你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + ...原创 2021-11-19 00:12:11 · 486 阅读 · 0 评论 -
740. 删除并获得点数
740. 删除并获得点数难度中等474给你一个整数数组nums,你可以对它进行一些操作。每次操作中,选择任意一个nums[i],删除它并获得nums[i]的点数。之后,你必须删除所有等于nums[i] - 1和nums[i] + 1的元素。开始你拥有0个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。之后,删除 2 获得 2 个点数。总共获得 ...原创 2021-11-18 20:19:43 · 359 阅读 · 0 评论 -
318. 最大单词长度乘积
318. 最大单词长度乘积给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。示例1:输入: ["abcw","baz","foo","bar","xtfn","abcdef"]输出: 16 解释: 这两个单词为 "abcw", "xtfn"示例 2:输入: ["a","ab","abc","d","cd","bcd...原创 2021-11-17 10:37:35 · 103 阅读 · 0 评论 -
319. 灯泡开关
319. 灯泡开关初始时有n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭一个。第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换一个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。找出并返回 n轮后有多少个亮着的灯泡。示例 1:输入:n = 3输出:1 解释:初始时, 灯泡状态 [关闭, 关闭, 关闭].第一轮后, 灯泡状态 [开启, 开启, 开启].第二..原创 2021-11-15 19:18:21 · 372 阅读 · 0 评论 -
237. 删除链表中的节点
237. 删除链表中的节点难度简单1034请编写一个函数,用于删除单链表中某个特定节点。在设计函数时需要注意,你无法访问链表的头节点head,只能直接访问要被删除的节点。题目数据保证需要删除的节点不是末尾节点。示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:指定链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9示例 2:输入:head = [4...原创 2021-11-02 16:33:11 · 284 阅读 · 0 评论 -
869. 重新排序得到 2 的幂
869. 重新排序得到 2 的幂难度中等120给定正整数N,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。如果我们可以通过上述方式得到2 的幂,返回true;否则,返回false。示例 1:输入:1输出:true示例 2:输入:10输出:false示例 3:输入:16输出:true示例 4:输入:24输出:false示例 5:输入:46输出:true提示:1 <= N &...原创 2021-10-28 18:59:31 · 139 阅读 · 0 评论 -
187. 重复的DNA序列
187. 重复的DNA序列难度中等247收藏分享切换为英文接收动态反馈所有 DNA 都由一系列缩写为'A','C','G'和'T'的核苷酸组成,例如:"ACGAATTCCG"。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串s中出现次数超过一次。示例 1:输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"输出:["AAAAACCCCC","...原创 2021-10-08 14:11:11 · 164 阅读 · 0 评论 -
166. 分数到小数
给定两个整数,分别表示分数的分子numerator 和分母 denominator,以 字符串形式返回小数 。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需返回 任意一个 。对于所有给定的输入,保证 答案字符串的长度小于 104 。示例 1:输入:numerator = 1, denominator = 2输出:"0.5"示例 2:输入:numerator = 2, denominator = 1输出:"2"示例 3:输入:numerato.原创 2021-10-03 14:10:42 · 82 阅读 · 0 评论