![](https://img-blog.csdnimg.cn/c484e7caaa9d4280b9789aeaf53fa66e.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode算法题总结
文章平均质量分 62
LeetCode算法题目心得总结
·星辰大海
这个作者很懒,什么都没留下…
展开
-
LeetCode中等题之盛最多水的容器
在数组的头和尾分别设置一个指针,通过题目可以知道目的主要是找最大,直接比较两个指针指向的值大小,小的值的指针往中间靠即可在搜索中找到最大容量。给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。输入:[1,8,6,2,5,4,8,3,7]输入:height = [1,1]原创 2024-01-01 15:12:39 · 412 阅读 · 0 评论 -
LeetCode简单题之到目标字符串的最短距离
形式上, words[i] 的下一个元素是 words[(i + 1) % n] ,而 words[i] 的前一个元素是 words[(i - 1 + n) % n] ,其中 n 是 words 的长度。输入:words = [“hello”,“i”,“am”,“leetcode”,“hello”], target = “hello”, startIndex = 1。输入:words = [“i”,“eat”,“leetcode”], target = “ate”, startIndex = 0。原创 2023-09-15 16:58:00 · 129 阅读 · 0 评论 -
LeetCode简单题之一最多的行
给你一个大小为 m x n 的二进制矩阵 mat ,请你找出包含最多 1 的行的下标(从 0 开始)以及这一行中 1 的数目。该行 1 的数量为 1。所以,答案为 [0,1]。解释:下标为 1 的行中 1 的数量最多。所以,答案为 [1,2]。解释:下标为 1 的行中 1 的数量最多。所以,答案为 [1,2]。输入:mat = [[0,0],[1,1],[0,0]]输入:mat = [[0,0,0],[0,1,1]]输入:mat = [[0,1],[1,0]]mat[i][j] 为 0 或 1。原创 2023-08-30 10:15:46 · 85 阅读 · 0 评论 -
LeetCode简单题之最小公共值
给你两个整数数组 nums1 和 nums2 ,它们已经按非降序排序,请你返回两个数组的 最小公共整数。在这个题目的最后又给出了一个非常友好的条件,如果nums1和nums2都是升序排列的话,那么我们只需要模拟归并排序的过程即可找到相等的最小值。输入:nums1 = [1,2,3,6], nums2 = [2,3,4,5]解释:两个数组中的公共元素是 2 和 3 ,2 是较小值,所以返回 2。输入:nums1 = [1,2,3], nums2 = [2,4]原创 2023-08-12 22:08:23 · 71 阅读 · 0 评论 -
LeetCode中等题之最长连续序列
先利用哈希进行去重,然后新建一个列表记录每个子序列的开头和结尾;新建一个标志位,标记每个元素是否被访问过。遍历开头结尾记录列表,并以当前值为开头和结尾分别向两边查找,对数列进行计长,最后根据更新后的开头结尾信息获取最大长度的子序列。给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。解释:最长数字连续序列是 [1, 2, 3, 4]。输入:nums = [0,3,7,2,5,8,4,6,0,1]输入:nums = [100,4,200,1,3,2]原创 2023-08-11 15:24:56 · 43 阅读 · 0 评论 -
LeetCode简单题之删除每行中的最大值
对于一个矩阵每次都需要在每行中找出当前行最大值删除,这样矩阵就会整体少一列,那么对于这样的问题,可以直接先对每行进行排序,然后每次取每列中的最大值相加即可。如果存在多个这样的值,删除其中任何一个。给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。输入:grid = [[1,2,4],[3,3,1]]注意 每执行一次操作,矩阵中列的数据就会减 1。解释:上图展示在每一步中需要移除的值。解释:上图展示在每一步中需要移除的值。将删除元素中的最大值与答案相加。输入:grid = [[10]]原创 2023-08-11 13:50:35 · 46 阅读 · 0 评论 -
LeetCode简单题之等差数列中缺失的数字
只需要三个数字即可算出来等差数列本来的间隔应该是多少,三个连续的数字中,用第二个数字减去第一个数字和第三个数字减去第二个数字中较小的那个值就是等差。最后只需要遍历数组按照正常等差数列模拟生成一个新的数列,如果过程中发现生成的数字和原本数组中的数字不等则已经发现了被删除的那个数。在某个数组 arr 中,值符合等差数列的数值规律:在 0原创 2023-04-20 16:50:55 · 253 阅读 · 1 评论 -
LeetCode简单题之单行键盘
给定一个长度为 26 的字符串 keyboard ,来表示键盘的布局(索引从 0 到 25 )。要输入一个字符,你必须把你的手指移动到所需字符的索引处。直接做一个简单的映射,把字母和下标分别做成key和value,然后每次移动都按照规则相加即可获得最终的结果。输入:keyboard = “pqrstuvwxyzabcdefghijklmno”, word = “leetcode”解释:从 0 号键移动到 2 号键来输出 ‘c’,又移动到 1 号键来输出 ‘b’,接着移动到 0 号键来输出 ‘a’。原创 2023-04-20 16:38:22 · 117 阅读 · 0 评论 -
LeetCode简单题之相似 RGB 颜色
现在,假如我们分别定义两个颜色 “#ABCDEF” 和 “#UVWXYZ”,则他们的相似度可以通过这个表达式 -(AB - UV)^ 2 - (CD - WX)^ 2 - (EF - YZ)^2 来计算。因为相似度计算得出 -(0x09 - 0x11)^ 2 -(0xf1 - 0xee)^ 2 - (0x66 - 0x66)^2 = -64 -9 -0 = -73。RGB 颜色 “#AABBCC” 可以简写成 “#ABC”。例如,“#15c” 其实是 “#1155cc” 的简写。输出:“#11ee66”原创 2023-04-20 16:24:26 · 278 阅读 · 0 评论 -
LeetCode简单题之检查一个数是否在数组中占绝大多数
假如数组 nums 中绝大多数元素的数值都等于 target,则返回 True,否则请返回 False。输入:nums = [2,4,5,5,5,5,5,6,6], target = 5。输入:nums = [10,100,101,101], target = 101。所谓占绝大多数,是指在长度为 N 的数组中出现必须 超过 N/2 次。所以,101 不是 数组占绝大多数的元素,因为 2 次 = 4/2。所以,5 在数组中占绝大多数,因为 5 次 > 9/2。数字 5 出现了 5 次,而数组的长度为 9。原创 2023-04-20 15:48:00 · 51 阅读 · 0 评论 -
LeetCode简单题之阿姆斯特朗数
假设存在一个 k 位数 n ,其每一位上的数字的 k 次幂的总和也是 n ,那么这个数是阿姆斯特朗数。给你一个整数 n ,让你来判定他是否是 阿姆斯特朗数,是则返回 true,不是则返回 false。解释:123 是一个 3 位数,且 123!153 是一个 3 位数,且 153 = 13 + 53 + 33。将数字逐位分解之后再按要求相加即可。输入:n = 153。输入:n = 123。原创 2023-04-20 15:38:27 · 101 阅读 · 0 评论 -
LeetCode简单题之找出变位映射
一个映射 P[i] = j 指的是列表 A 中的第 i 个元素出现于列表 B 中的第 j 个元素上。P[0] = 1 ,因为 A 中的第 0 个元素出现于 B[1],而且 P[1] = 4 因为 A 中第 1 个元素出现于 B[4],以此类推。给定两个列表 Aand B,并且 B 是 A 的变位(即 B 是由 A 中的元素随机排列后组成的新列表)。简单的思路是,遍历B的时候查询当前元素在A中的下标,复杂度为O(n^2).A[i], B[i] 都是范围在 [0, 10^5] 的整数。原创 2023-04-20 15:31:07 · 54 阅读 · 0 评论 -
LeetCode简单题之句子相似性
输入: sentence1 = [“great”,“acting”,“skills”], sentence2 = [“fine”,“drama”,“talent”], similarPairs = [[“great”,“fine”],[“drama”,“acting”],[“skills”,“talent”]]我们可以将一个句子表示为一个单词数组,例如,句子 “I am happy with leetcode” 可以表示为 arr = [“I”,“am”,happy",“with”,“leetcode”]原创 2023-04-20 10:53:36 · 152 阅读 · 0 评论 -
LeetCode简单题之会议室
给定一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,请你判断一个人是否能够参加这里面的全部会议。上面的方法是通过暴力穷举解决的,考虑到时间是具有顺序的,当我们按照开始或者结束时间进行排序时,检查是否有逆序对就可以非常快速地判断当前条件是否符合题目条件。输入:intervals = [[0,30],[5,10],[15,20]]输入:intervals = [[7,10],[2,4]]原创 2023-04-20 09:39:40 · 268 阅读 · 0 评论 -
LeetCode简单题之最短单词距离
输入: wordsDict = [“practice”, “makes”, “perfect”, “coding”, “makes”], word1 = “coding”, word2 = “practice”输入: wordsDict = [“practice”, “makes”, “perfect”, “coding”, “makes”], word1 = “makes”, word2 = “coding”返回列表中这两个单词之间的最短距离。word1 和 word2 在 wordsDict 中。原创 2023-04-20 09:12:54 · 76 阅读 · 0 评论 -
LeetCode简单题之回文排列
一个字符串能否重新排列组合成回文字符串需要字符串中各个字符的频率是2的倍数且奇数数目的字符只能有一种。直接使用collections包中的Counter即可得出字符串中各个字符出现频率。给定一个字符串,判断该字符串中是否可以通过重新排列组合,形成一个回文字符串。输入: “carerac”输入: “code”原创 2023-04-19 17:46:11 · 235 阅读 · 0 评论 -
LeetCode简答题之统计相似字符串对的数目
请你找出满足字符串 words[i] 和 words[j] 相似的下标对 (i, j) ,并返回下标对的数目,其中 0原创 2023-01-30 17:48:57 · 147 阅读 · 0 评论 -
字典序问题
这个题目乍一看还是比较繁琐的,a到z是1到26,如果按照正常的26进制数来解释的话aa应该是27,但是在这个题目中,ab是27;分析一个数字的方法有很多,我们可以将一个数字的大头部分和其零碎部分分开来进行解决,比如一个数字1038,那么他是由1000和38组成,所以对于这个题首先分析相同位数的字母所能表示的最小数字,比如ab,abc,abcd;这里我们用一种最简单的编码方式进行编码:把一些有规律的单词编成数字。,z},这些特殊的单词长度不超过6且字母按升序排列。你的任务就是对于所给的单词,求出它的编码。翻译 2022-12-16 16:56:51 · 136 阅读 · 0 评论 -
LeetCode中等题之重新排列句子中的单词
题目难度应当属于简单题,对于给定的字符序列,首先需要按照空格分开来以得到长度不同的单词,然后根据单词的长度进行排序,最后按照题目要求的格式把第一个字母大写然后将后面所有的字符都统统变为小写。解释:句子中共有 3 个单词,长度为 8 的 “Leetcode” ,长度为 2 的 “is” 以及长度为 4 的 “cool”。“keep” 4 个字母,因为存在长度相同的其他单词,所以它们之间需要保留在原句子中的相对顺序。输出需要按单词的长度升序排列,新句子中的第一个单词首字母需要大写。“calm” 4 个字母。原创 2022-12-13 15:54:34 · 124 阅读 · 0 评论 -
LeetCode简单题之最小偶倍数
这个题需要证明2和一个奇数的最小公倍数是他们两个相乘,假设a为奇数,那么a=2n+1,假设存在一个偶数c不是2xa,可以使得2%c=0和a%c=0,2%c=0 ,那么c只可能是1或者2,如果c是1 则a应当小于0.5,显然a=2n+1>0.5。解释:6 和 2 的最小公倍数是 6。注意数字会是它自身的倍数。给你一个正整数 n ,返回 2 和 n 的最小公倍数(正整数)。解释:5 和 2 的最小公倍数是 10。原创 2022-12-09 15:30:47 · 225 阅读 · 0 评论 -
LeetCode中等题之判断一个数字是否可以表示成三的幂的和
给你一个整数 n ,如果你可以将 n 表示成若干个不同的三的幂之和,请你返回 true ,否则请返回 false。这个题就是关于进制转换的题,只需要每次转换一位得到的数字不是0和1则可以判断结果为false。对于一个整数 y ,如果存在整数 x 满足 y == 3x ,我们称这个整数 y 是三的幂。解释:91 = 30 + 32 + 34。解释:12 = 31 + 32。原创 2022-12-09 14:05:11 · 264 阅读 · 0 评论 -
LeetCode简单题之可被三整除的偶数的平均值
给你一个由正整数组成的整数数组 nums ,返回其中可被 3 整除的所有偶数的平均值。注意:n 个元素的平均值等于 n 个元素 求和 再除以 n ,结果 向下取整 到最接近的整数。示例 1:输入:nums = [1,3,6,10,12,15]输出:9解释:6 和 12 是可以被 3 整除的偶数。(6 + 12) / 2 = 9 。示例 2:输入:nums = [1,2,4,7,10]输出:0解释:不存在满足题目要求的整数,所以返回 0 。提示:1原创 2022-12-07 13:47:07 · 213 阅读 · 0 评论 -
LeetCode简单题之按身高排序
给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。请按身高 降序 顺序返回对应的名字数组 names 。示例 1:输入:names = [“Mary”,“John”,“Emma”], heights = [180,165,170]输出:[“Mary”,“Emma”,“John”]解释:Mary 最高,接着是 Emma 和 John 。示例 2:原创 2022-12-07 11:31:10 · 1047 阅读 · 0 评论 -
LeetCode中等题之通过最少操作次数使数组的和相等
给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。如果无法使两个数组的和相等,请返回 -1 。示例 1:输入:nums1 = [1,2,3,4,5,6], nums2 = [1,1,2,2,2,2]输出:3解释:你可以通过 3 次操作使原创 2022-12-07 11:08:00 · 474 阅读 · 0 评论 -
LeetCode中等题之使括号有效的最少添加
只有满足下面几点之一,括号字符串才是有效的:它是一个空字符串,或者它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者它可以被写作 (A),其中 A 是有效字符串。给定一个括号字符串 s ,在每一次操作中,你都可以在字符串的任何位置插入一个括号例如,如果 s = “()))” ,你可以插入一个开始括号为 “(()))” 或结束括号为 “())))” 。返回 为使结果字符串 s 有效而必须添加的最少括号数。示例 1:输入:s = “())”输出:1示例 2:输入:s原创 2022-12-06 17:48:15 · 261 阅读 · 0 评论 -
LeetCode中等题之查找和替换模式
你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)返回 words 中与给定模式匹配的单词列表。你可以按任何顺序返回答案。示例:输入:words = [“abc”,“deq”,“mee”,“aqq”,“dkd”,“ccc”],原创 2022-12-06 17:21:58 · 247 阅读 · 0 评论 -
LeetCode简单题之回环句
句子 是由单个空格分隔的一组单词,且不含前导或尾随空格。例如,“Hello World”、“HELLO”、“hello world hello world” 都是符合要求的句子。单词 仅 由大写和小写英文字母组成。且大写和小写字母会视作不同字符。如果句子满足下述全部条件,则认为它是一个 回环句 :单词的最后一个字符和下一个单词的第一个字符相等。最后一个单词的最后一个字符和第一个单词的第一个字符相等。例如,“leetcode exercises sound delightful”、“eetcode”、“原创 2022-12-06 16:04:16 · 458 阅读 · 0 评论 -
LeetCode简单题之公因子的数目
给你两个正整数 a 和 b ,返回 a 和 b 的 公 因子的数目。如果 x 可以同时整除 a 和 b ,则认为 x 是 a 和 b 的一个 公因子 。示例 1:输入:a = 12, b = 6输出:4解释:12 和 6 的公因子是 1、2、3、6 。示例 2:输入:a = 25, b = 30输出:2解释:25 和 30 的公因子是 1、5 。提示:1原创 2022-12-06 15:55:13 · 326 阅读 · 0 评论 -
LeetCode简单题之温度转换
给你一个四舍五入到两位小数的非负浮点数 celsius 来表示温度,以 摄氏度(Celsius)为单位。你需要将摄氏度转换为 开氏度(Kelvin)和 华氏度(Fahrenheit),并以数组 ans = [kelvin, fahrenheit] 的形式返回结果。返回数组 ans 。与实际答案误差不超过 10-5 的会视为正确答案。注意:开氏度 = 摄氏度 + 273.15华氏度 = 摄氏度 * 1.80 + 32.00示例 1 :输入:celsius = 36.50输出:[309.65000,97.7原创 2022-12-06 15:51:08 · 728 阅读 · 0 评论 -
LeetCode简单题之统计共同度过的日子数
Alice 和 Bob 计划分别去罗马开会。给你四个字符串 arriveAlice ,leaveAlice ,arriveBob 和 leaveBob 。Alice 会在日期 arriveAlice 到 leaveAlice 之间在城市里(日期为闭区间),而 Bob 在日期 arriveBob 到 leaveBob 之间在城市里(日期为闭区间)。每个字符串都包含 5 个字符,格式为 “MM-DD” ,对应着一个日期的月和日。请你返回 Alice和 Bob 同时在罗马的天数。你可以假设所有日期都在 同一个 自原创 2022-12-06 15:38:57 · 455 阅读 · 0 评论 -
LeetCode中等题之Z 字形变换
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入:s = “PAYPALISH原创 2022-12-06 12:01:02 · 135 阅读 · 0 评论 -
LeetCode简单题之不同的平均值数目
给你一个下标从 0开始长度为 偶数的整数数组nums。只要nums 不是空数组,你就重复执行以下步骤:找到nums中的最小值,并删除它。找到nums中的最大值,并删除它。计算删除两数的平均值。两数 a和 b的 平均值为(a + b) / 2。比方说,2和3的平均值是(2 + 3) / 2 = 2.5。返回上述过程能得到的 不同平均值的数目。注意,如果最小值或者最大值有重复元素,可以删除任意一个。示例 1:输入:nums = [原创 2022-12-02 14:14:31 · 528 阅读 · 1 评论 -
LeetCode中等题之整数转罗马数字
一般地,如果需要将一个数字的各个位拆分开来也是类似的做法,可以先对给定的数字进行尽可能的求商和求余,把每次的结果拼起来就是最终的结果。在给定的转换规则中尽可能的挑选大的数字先映射为罗马数字,然后再来看小的数字,当然在转换的过程中需要注意特殊的数字。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。解释: M = 1000, CM = 900, XC = 90, IV = 4.罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。输入: num = 4。原创 2022-11-12 20:45:13 · 737 阅读 · 1 评论 -
LeetCode简单题之判断两个事件是否存在冲突
题目比较简单,可以直接使用第一个时间的结束时间和第二个时间的开始时间进行比较,如果第一个时间的结束时间大于第二个时间的开始时间则两个时间有一定的交集,同理的第一个时间作为第二个时间,第二个时间作为第一个时间来看的话情况是一样的。输入:event1 = [“01:00”,“02:00”], event2 = [“01:20”,“03:00”]输入:event1 = [“10:00”,“11:00”], event2 = [“14:00”,“15:00”]解释:两个事件在 2:00 出现交集。原创 2022-11-11 22:23:27 · 694 阅读 · 0 评论 -
LeetCode中等题之二叉树的层序遍历 II
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)本质上和层序遍历是一个题目,也是运用广度优先遍历算法,对队列进行一次性全部操作作为一层的结果。输入:root = [3,9,20,null,null,15,7]输出:[[15,7],[9,20],[3]]树中节点数目在范围 [0, 2000] 内。输入:root = [1]输入:root = []原创 2022-11-10 22:45:38 · 107 阅读 · 0 评论 -
LeetCode中等题之二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。经典的队列应用题,在原来的广度优先遍历的基础之上,每次对整个队列进行处理即可获得每层的信息。输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]树中节点数目在范围 [0, 2000] 内。输入:root = [1]输入:root = []原创 2022-11-10 22:37:58 · 157 阅读 · 0 评论 -
LeetCode中等题之字母大小写全排列
题目思路非常简单,把给定的字符串中所有的字母找出来,然后进行排列组合,把所有可能替换后的结果列出来即可。给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。输出:[“a1b2”, “a1B2”, “A1b2”, “A1B2”]返回 所有可能得到的字符串集合。以 任意顺序 返回输出。s 由小写英文字母、大写英文字母和数字组成。输出: [“3z4”,“3Z4”]输入:s = “a1b2”输入: s = “3z4”原创 2022-10-30 19:49:29 · 210 阅读 · 0 评论 -
LeetCode中等题之分割数组
分割数组给定一个数组nums,将其划分为两个连续子数组left和right,使得:left中的每个元素都小于或等于right中的每个元素。left 和right都是非空的。left 的长度要尽可能小。在完成这样的分组后返回left的长度。用例可以保证存在这样的划分方法。示例 1:输入:nums = [5,0,3,8,6]输出:3解释:left = [5,0,3],right = [8,6]示例 2:输入:nums = [1,1,1,0,6原创 2022-10-24 14:50:38 · 633 阅读 · 0 评论 -
LeetCode中等题之股票价格跨度
输入:[“StockSpanner”,“next”,“next”,“next”,“next”,“next”,“next”,“next”], [[],[100],[80],[60],[70],[60],[75],[85]]例如,如果未来7天股票的价格是 [100, 80, 60, 70, 60, 75, 85],那么股票跨度将是 [1, 1, 1, 2, 1, 4, 6]。注意 (例如) S.next(75) 返回 4,因为截至今天的最后 4 个价格。输出:[null,1,1,1,2,1,4,6]原创 2022-10-21 22:17:54 · 99 阅读 · 0 评论 -
LeetCode中等题之子域名访问计数
输出:[“901 mail.com”,“50 yahoo.com”,“900 google.mail.com”,“5 wiki.org”,“5 org”,“1 intel.mail.com”,“951 com”]解释:按照前文描述,会访问 “google.mail.com” 900 次,“yahoo.com” 50 次,“intel.mail.com” 1 次,“wiki.org” 5 次。按照前文描述,子域名 “leetcode.com” 和 “com” 都会被访问,所以它们都被访问了 9001 次。原创 2022-10-05 17:27:40 · 572 阅读 · 0 评论