算法
文章平均质量分 88
一些刷题
墨momo
如有必要可私信答疑
展开
-
【力扣】21. 合并两个有序链表
【力扣】21. 合并两个有序链表原创 2023-08-05 18:09:33 · 611 阅读 · 0 评论 -
【力扣】980. 不同路径Ⅲ
【力扣】980. 不同路径Ⅲ原创 2023-08-04 20:00:00 · 448 阅读 · 0 评论 -
【力扣】722. 删除注释
【力扣】722. 删除注释原创 2023-08-03 20:38:49 · 341 阅读 · 0 评论 -
【力扣】822. 翻转卡片游戏
【力扣】822. 翻转卡片游戏原创 2023-08-02 19:52:36 · 621 阅读 · 0 评论 -
【力扣】2681. 英雄的力量
【力扣】2681. 英雄的力量转载 2023-08-01 22:15:49 · 92 阅读 · 0 评论 -
【力扣】711. 宝石与石头
【力扣】711. 宝石与石头原创 2023-07-24 21:37:36 · 84 阅读 · 0 评论 -
【力扣】42. 接雨水
【力扣】42. 接雨水原创 2023-07-23 17:26:21 · 71 阅读 · 0 评论 -
【力扣】132. 分割回文串 II
以下为力扣官方题解132. 分割回文串 II题目示例 1:示例 2:示例 3:提示:官方题解方法一:动态规划思路与算法代码复杂度分析题目给你一个字符串 sss,请你将 sss 分割成一些子串,使每个子串都是回文。返回符合要求的 最少分割次数 。示例 1:输入:s="aab"s = "aab"s="aab"输出:111解释:只需一次分割就可将 sss 分割成 ["aa","b"]["aa","b"]["aa","b"] 这样两个回文子串。示例 2:输入:s="a"s = "a"s转载 2021-03-08 19:40:02 · 337 阅读 · 0 评论 -
【力扣】131. 分割回文串
以下为力扣官方题解131. 分割回文串题目示例:官方题解方法一:回溯 + 动态规划预处理思路与算法细节代码复杂度分析方法二:回溯 + 记忆化搜索思路与算法代码复杂度分析题目给定一个字符串 sss,将 sss 分割成一些子串,使每个子串都是回文串。返回 sss 所有可能的分割方案。示例:输入: “aabaabaab”输出:[["aaaaaa","bbb"],["aaa","aaa","bbb"]]官方题解方法一:回溯 + 动态规划预处理思路与算法由于需要求出字符串 sss转载 2021-03-07 10:10:03 · 210 阅读 · 0 评论 -
【力扣】1178. 猜字谜
以下为力扣官方题解1178. 猜字谜题目示例提示官方题解前言方法一 二进制状态压缩思路与算法细节代码题目外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。字谜的迷面 puzzlepuzzlepuzzle 按字符串形式给出,如果一个单词 wordwordword 符合下面两个条件,那么它就可以算作谜底:单词 wordwordword 中包含谜面 puzzlepuzzlepuzzle 的第一个字母。单词 wordwordword 中的每一个字母都可以在谜面 puzzlepuzzl转载 2021-03-06 11:12:00 · 228 阅读 · 0 评论 -
【力扣】896. 单调数列
以下为本人思路,以及力扣官方题解896. 单调数列题目示例 1:示例 2:示例 3:示例 4:示例 5:提示:本人思路代码复杂度分析提交结果:通过官方题解题目如果数组是单调递增或单调递减的,那么它是单调的。如果对于所有 i<=ji <= ji<=j,A[i]<=A[j]A[i] <= A[j]A[i]<=A[j],那么数组 AAA 是单调递增的。 如果对于所有 i<=ji <= ji<=j,A[i]>=A[j]A[i]> = A[j原创 2021-03-06 09:57:50 · 224 阅读 · 0 评论 -
【力扣】503. 下一个更大元素 II
以下为本人思路,以及力扣官方题解503. 下一个更大元素 II题目示例 1:注意:本人思路代码复杂度分析提交结果:通过官方题解方法一:单调栈 + 循环数组思路及算法代码复杂度分析题目给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 xxx 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 −1-1−1。示例 1:输入: [1,2,1][1,2,1][1,2,1原创 2021-03-06 09:43:15 · 568 阅读 · 0 评论 -
【力扣】232. 用栈实现队列
以下为力扣官方题解232. 用栈实现队列题目说明:进阶:示例:提示:官方题解方法一:双栈思路代码复杂度分析题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty)push、pop、peek、empty)push、pop、peek、empty):实现 MyQueueMyQueueMyQueue 类:voidpush(intx)void push(int x)voidpush(intx) 将元素 xxx 推到队列的末尾intpop()i转载 2021-03-05 12:11:19 · 92 阅读 · 0 评论 -
【力扣】354. 俄罗斯套娃信封问题
以下为力扣官方题解354. 俄罗斯套娃信封问题题目说明:示例:官方题解前言方法一:动态规划思路与算法代码复杂度分析方法二:基于二分查找的动态规划思路与算法代码复杂度分析题目给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelo转载 2021-03-04 11:02:33 · 955 阅读 · 1 评论 -
【力扣】338. 比特位计数
以下为力扣官方题解338. 比特位计数题目示例 1:示例 2:进阶:官方题解前言方法一:直接计算代码复杂度分析方法二:动态规划——最高有效位代码复杂度分析方法三:动态规划——最低有效位代码复杂度分析方法四:动态规划——最低设置位代码复杂度分析题目给定一个非负整数 numnumnum。对于 0≤i≤num0 ≤ i ≤ num0≤i≤num 范围中的每个数字 iii ,计算其二进制数中的 111 的数目并将它们作为数组返回。示例 1:输入: 222输出: [0,1,1][0,1,1][0,1转载 2021-03-03 12:18:28 · 166 阅读 · 0 评论 -
【力扣】304. 二维区域和检索 - 矩阵不可变
以下为力扣官方题解304. 二维区域和检索 - 矩阵不可变题目示例:提示:官方题解前言方法一:一维前缀和代码复杂度分析方法二:二维前缀和代码复杂度分析题目给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1,col1)(row1, col1)(row1,col1) ,右下角为 (row2,col2)(row2, col2)(row2,col2) 。上图子矩阵左上角 (row1,col1)=(2,1)(row1, col1) = (2, 1)(row1,col1)=(2,转载 2021-03-02 11:53:43 · 374 阅读 · 0 评论 -
【力扣】395. 至少有K个重复字符的最长子串
以下为力扣官方题解395. 至少有K个重复字符的最长子串题目示例1示例2提示官方题解方法一:分治代码复杂度分析方法二:滑动窗口代码复杂度分析题目给你一个字符串 sss 和一个整数 kkk,请你找出 sss 中的最长子串, 要求该子串中的每一字符出现次数都不少于 kkk 。返回这一子串的长度。示例1输入:s="aaabb",k=3s = "aaabb", k = 3s="aaabb",k=3输出:333解释:最长子串为 “aaaaaaaaa” ,其中 ‘aaa’ 重复了 333 次。示转载 2021-02-27 19:05:46 · 1082 阅读 · 0 评论 -
【力扣】832. 翻转图像
以下为本人思路,以及力扣官方题解832. 翻转图像题目示例1示例2提示本人思路代码复杂度分析提交结果:通过官方题解 模拟优化+双指针代码复杂度分析题目给定一个二进制矩阵 AAA,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1,1,0][1, 1, 0][1,1,0] 的结果是 [0,1,1][0, 1, 1][0,1,1]。反转图片的意思是图片中的 000 全部被 111 替换, 111 全部被 000 替换。例如,反转 [0原创 2021-02-24 17:34:17 · 181 阅读 · 0 评论 -
【力扣】1052. 爱生气的书店老板
以下为力扣官方题解1052. 爱生气的书店老板题目示例提示官方题解方法一 滑动窗口代码复杂度分析题目今天,书店老板有一家店打算试营业 customers.lengthcustomers.lengthcustomers.length 分钟。每分钟都有一些顾客(customers[i]customers[i]customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 iii 分钟生气,那么 grumpy[i]=1grumpy[i] = 1转载 2021-02-23 20:20:59 · 171 阅读 · 0 评论 -
【力扣】766. 托普利茨矩阵
以下为本人思路,末尾进阶部分的答案来自力扣官方题解766. 托普利茨矩阵题目示例1示例2提示进阶本人思路代码复杂度分析进阶问题题目给你一个 m×nm × nm×n 的矩阵 matrixmatrixmatrix 。如果这个矩阵是托普利茨矩阵,返回 truetruetrue;否则,返回 falsefalsefalse。如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。示例1输入:matrix=[[1,2,3,4],[5,1,2,3],[9,5,1,2]]ma原创 2021-02-22 15:32:42 · 75 阅读 · 0 评论 -
【力扣】697. 数组的度
以下为本人思路,以及力扣的官方题解697. 数组的度题目示例1示例2提示本人思路失败代码官方题解方法一 哈希表思路与算法代码复杂度分析题目给定一个非空且只包含非负数的整数数组 numsnumsnums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在 numsnumsnums 中找到与 numsnumsnums 拥有相同大小的度的最短连续子数组,返回其长度。示例1输入:[1,2,2,3,1][1, 2, 2, 3, 1][1,2,2,3,1]输出:222解释:输入数组的度原创 2021-02-20 14:24:58 · 171 阅读 · 0 评论 -
【力扣】1004. 最大连续1的个数 III
以下为力扣的官方题解1004. 最大连续1的个数 III题目示例1示例2提示官方题解前言方法一 二分查找思路与算法细节代码复杂度分析方法二 滑动窗口思路与算法细节代码复杂度分析题目给定一个由若干 000 和 111 组成的数组 AAA,我们最多可以将 KKK 个值从 000 变成 111 。返回仅包含 111 的最长(连续)子数组的长度。示例1输入:A=[1,1,1,0,0,0,1,1,1,1,0],K=2A = [1,1,1,0,0,0,1,1,1,1,0], K = 2A=[1,1,1转载 2021-02-19 16:44:06 · 389 阅读 · 0 评论 -
【力扣】995. K 连续位的最小翻转次数
以下为力扣的官方题解995. K 连续位的最小翻转次数题目示例1示例2示例3提示官方题解方法一 差分数组代码复杂度分析方法二 滑动窗口代码复杂度分析题目在仅包含 000 和 111 的数组 AAA 中,一次 KKK 位翻转包括选择一个长度为 KKK 的(连续)子数组,同时将子数组中的每个 000 更改为 111,而每个 111 更改为 0。返回所需的 KKK 位翻转的最小次数,以便数组没有值为 000 的元素。如果不可能,返回 −1-1−1。示例1输入:A=[0,1,0],K=1A = [转载 2021-02-18 17:20:41 · 215 阅读 · 0 评论 -
【力扣】480. 滑动窗口中位数
以下为力扣的官方题解480. 滑动窗口中位数题目示例提示官方题解前言题目中位数是有序序列最中间的那个数。如果序列的长度是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。例如:[2,3,4][2,3,4][2,3,4],中位数是 333[2,3][2,3][2,3],中位数是 (2+3)/2=2.5(2 + 3) / 2 = 2.5(2+3)/2=2.5给你一个数组 numsnumsnums,有一个长度为 kkk 的窗口从最左端滑动到最右端。窗口中有 kkk 个数,每次窗口向右移动转载 2021-02-18 00:51:14 · 209 阅读 · 0 评论 -
【力扣】566. 重塑矩阵
以下为力扣官方题解566. 重塑矩阵题目示例1示例2注意官方题解 二维数组的一唯表示思路与算法代码复杂度分析题目在 MATLABMATLABMATLAB 中,有一个非常有用的函数 reshapereshapereshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。给出一个由二维数组表示的矩阵,以及两个正整数 rrr 和 ccc,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的 reshapereshap转载 2021-02-17 19:09:05 · 354 阅读 · 0 评论 -
【力扣】765. 情侣牵手
以下为力扣的官方题解765. 情侣牵手题目示例1示例2说明官方题解思路一 并查集代码复杂度分析思路二 广度优先搜索代码复杂度分析题目NNN 对情侣坐在连续排列的 2N2N2N 个座位上,想要牵到对方的手。 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起。 一次交换可选择任意两人,让他们站起来交换座位。人和座位用 000 到 2N−12N-12N−1 的整数表示,情侣们按顺序编号,第一对是 (0,1)(0, 1)(0,1),第二对是 (2,3)(2, 3)(2,3),以此类推,最后一对是 (2转载 2021-02-14 21:07:06 · 504 阅读 · 0 评论 -
【力扣】119. 杨辉三角 II
以下为本人思路,以及力扣官方题解119. 杨辉三角 II题目示例进阶本人思路官方题解思路一 递推代码优化代码进一步优化代码复杂度分析思路二 线性递推代码复杂度分析题目给定一个非负索引 kkk,其中 k≤33k ≤ 33k≤33,返回杨辉三角的第 kkk 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例输入: 333输出: [1,3,3,1][1,3,3,1][1,3,3,1]进阶你可以优化你的算法到 O(k)O(k)O(k) 空间复杂度吗?本人思路我们知道,杨辉三原创 2021-02-12 18:35:58 · 292 阅读 · 0 评论 -
【力扣】703. 数据流中的第 K 大元素
以下为力扣官方题解703. 数据流中的第 K 大元素题目示例提示官方题解 优先队列代码复杂度分析题目设计一个找到数据流中第 kkk 大元素的类(classclassclass)。注意是排序后的第 kkk 大元素,不是第 kkk 个不同的元素。请实现 KthLargestKthLargestKthLargest 类:KthLargest(intk,int[]nums)KthLargest(int k, int[] nums)KthLargest(intk,int[]nums) 使用整数 kkk转载 2021-02-11 17:00:17 · 2267 阅读 · 0 评论 -
【力扣】567. 字符串的排列
以下为力扣官方题解567. 字符串的排列题目示例1示例2注意官方题解思路一 滑动窗口代码优化代码(优化后)复杂度分析思路二 双指针代码复杂度分析题目给定两个字符串 s1s1s1 和 s2s2s2,写一个函数来判断 s2s2s2 是否包含 s1s1s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1输入: s1="ab",s2="eidbaooo"s1 = "ab", s2 = "eidbaooo"s1="ab",s2="eidbaooo"输出: TrueTrueTr转载 2021-02-10 23:17:59 · 258 阅读 · 0 评论 -
【力扣】992. K 个不同整数的子数组
以下为力扣的官方题解992. K 个不同整数的子数组题目示例1示例2提示官方题解 滑动窗口代码(含注释)复杂度分析题目给定一个正整数数组 AAA,如果 AAA 的某个子数组中不同整数的个数恰好为 KKK,则称 AAA 的这个连续、不一定独立的子数组为好子数组。(例如,[1,2,3,1,2][1,2,3,1,2][1,2,3,1,2] 中有 333 个不同的整数:111,222,以及 333。)返回 AAA 中好子数组的数目。示例1输入:A=[1,2,1,2,3],K=2A = [1,2,转载 2021-02-09 21:32:01 · 287 阅读 · 0 评论 -
【力扣】978. 最长湍流子数组
以下为力扣官方题解978. 最长湍流子数组题目示例1示例2示例3提示官方题解思路一 滑动窗口代码复杂度分析思路二代码优化代码复杂度分析题目当 AAA 的子数组$ A[i], A[i+1], …, A[j]$ 满足下列条件时,我们称其为湍流子数组:若 i<=k<ji <= k < ji<=k<j,当 kkk 为奇数时, A[k]>A[k+1]A[k] > A[k+1]A[k]>A[k+1],且当 kkk 为偶数时,A[k]<A[k+1]A转载 2021-02-08 16:40:45 · 162 阅读 · 0 评论 -
【力扣】665. 非递减数列(2)
以下为力扣官方题解及代码665. 非递减数列题目示例1示例2说明官方题解 数组代码优化代码复杂度分析题目给你一个长度为 nnn 的整数数组,请你判断在最多改变 111 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 iii (0<=i<=n−2)(0 <= i <= n-2)(0<=i<=n−2),总满足 nums[i]<=nums[i+1]nums[i] <= nums[i + 1]nums[i]&转载 2021-02-07 15:11:01 · 96 阅读 · 0 评论 -
【力扣】1423. 可获得的最大点数
以下为力扣官方题解,以及本人代码1423. 可获得的最大点数题目示例1示例2示例3示例4示例5提示官方题解 滑动窗口思路算法本人代码复杂度分析题目几张卡牌排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPointscardPointscardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 kkk 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPointscardPointscardPoints 和整数 kkk,请原创 2021-02-06 16:47:03 · 151 阅读 · 0 评论 -
【力扣】643. 子数组最大平均数 I
以下为力扣官方题解,以及本人代码643. 子数组最大平均数 I题目示例提示官方题解 滑动窗口本人代码复杂度分析题目给定 nnn 个整数,找出平均数最大且长度为 kkk 的连续子数组,并输出该最大平均数。示例输入:[1,12,−5,−6,50,3],k=4[1,12,-5,-6,50,3], k = 4[1,12,−5,−6,50,3],k=4输出:12.7512.7512.75解释:最大平均数 (12−5−6+50)/4=51/4=12.75(12-5-6+50)/4 = 51/4 =原创 2021-02-04 16:12:43 · 295 阅读 · 0 评论 -
【力扣】859. 亲密字符串
以下为力扣官方题解,以及本人代码859. 亲密字符串题目示例1示例2示例3示例4示例5提示官方题解 情况列举思路算法本人代码复杂度分析题目给定两个由小写字母构成的字符串 AAA 和 BBB ,只要我们可以通过交换 AAA 中的两个字母得到与 BBB 相等的结果,就返回 truetruetrue;否则返回 falsefalsefalse。交换字母的定义是取两个下标 iii 和 jjj (下标从 000 开始),只要 i!=ji!=ji!=j 就交换 A[i]A[i]A[i] 和 A[j]A[j]A[原创 2021-02-02 22:56:04 · 384 阅读 · 0 评论 -
【力扣】424. 替换后的最长重复字符
以下为力扣题友思路,以及本人代码424. 替换后的最长重复字符题目示例1示例2题友思路 滑动窗口本人代码复杂度分析题目给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 k 不会超过 104 。示例1输入:s = “ABAB”, k = 2输出:4解释:用两个 ‘A’ 替换为两个 ‘B’,反之亦然。示例2输入:s = “AABABBA”, k = 1输原创 2021-02-02 20:24:46 · 495 阅读 · 0 评论 -
【力扣】LCP 18. 早餐组合
以下为力扣题友思路,以及本人代码题目小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。注意:答案需要以 109 + 7 (1000000007) 为底取模,如:计算初始结果为 1000000008,请返回 1。示例1输入:staple = [10,20,5], drinks = [5,5,2], x = 15输出:6原创 2021-02-01 20:53:45 · 254 阅读 · 0 评论 -
【力扣】665. 非递减数列
以下为力扣题友的思路及本人代码665. 非递减数列题目示例1示例2说明题友思路 贪心解析:“下降”至多出现一次本人代码题目给你一个长度为 n 的整数数组,请你判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例1输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一原创 2021-02-01 19:18:44 · 108 阅读 · 0 评论 -
【力扣】888. 公平的糖果棒交换
以下为力扣的官方题解及代码888. 公平的糖果棒交换题目示例1示例2示例3示例4提示官方题解 哈希表代码复杂度分析题目爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大原创 2021-02-01 17:04:41 · 263 阅读 · 0 评论 -
【力扣】1685. 有序数组中差绝对值之和
以下为力扣题友的思路和代码1685. 有序数组中差绝对值之和题目示例1示例2提示题友思路 前缀和代码题目给你一个非递减有序整数数组 nums 。请你建立并返回一个整数数组 result,它跟 nums 长度相同,且 result[i] 等于 nums[i] 与数组中所有其他元素差的绝对值之和。换句话说, result[i] 等于 sum(|nums[i]-nums[j]|) ,其中 0 <= j < nums.length 且 j != i (下标从 0 开始)。示例1输入:原创 2021-01-28 19:50:54 · 626 阅读 · 0 评论