
力扣算法
文章平均质量分 51
刷过的题时间久了会忘记,所以在这里记录一下刷题笔记
筱筱
这个作者很懒,什么都没留下…
展开
-
【leetcode44-----根据数字二进制下1的数目排序】
给你一个整数数组arr。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中1的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。原创 2022-12-28 16:08:07 · 335 阅读 · 1 评论 -
【leetcode43-----有效的回旋镖】
给定一个数组points,其中points[i] = [xi, yi]表示 X-Y 平面上的一个点,如果这些点构成一个回旋镖则返回true。回旋镖定义为一组三个点,这些点各不相同且不在一条直线上。原创 2022-11-13 19:38:14 · 641 阅读 · 0 评论 -
【leetcode42-----距离顺序排列矩阵单元格】
给定四个整数 rows,cols ,rCenter 和 cCenter 。有一个rows x cols的矩阵,你在单元格上的坐标是(rCenter, cCenter) 。返回矩阵中的所有单元格的坐标,并按与(rCenter, cCenter)的 距离 从最小到最大的顺序排。你可以按 任何 满足此条件的顺序返回答案。单元格(r1, c1) 和 (r2, c2) 之间的距离为|r1 - r2| + |c1 - c2|。原创 2022-11-13 15:30:29 · 320 阅读 · 0 评论 -
【leetcode41-----可被5整除的二进制前缀】
给定一个二进制数组 nums (索引从0开始)。我们将xi定义为其二进制表示形式为子数组nums[0..i](从最高有效位到最低有效位)。例如,如果 nums =[1,0,1] ,那么x0= 1,x1= 2, 和x2= 5。返回布尔值列表answer,只有当xi可以被 5整除时,答案answer[i] 为true,否则为 false。原创 2022-11-12 20:13:13 · 461 阅读 · 0 评论 -
【leetcode40-----查找共用字符】
给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。原创 2022-11-12 15:17:34 · 208 阅读 · 0 评论 -
【leetcode39-----找到小镇的法官】
小镇里有 n 个人,按从 1 到 n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。如果小镇法官真的存在,那么:小镇法官不会信任任何人。每个人(除了小镇法官)都信任这位小镇法官。只有一个人同时满足属性 1 和属性 2 。给你一个数组 trust ,其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人。如果小镇法官存在并且可以确定他的身份,请返回该法官的编号;否则,返回 -1 。原创 2022-11-05 19:43:28 · 242 阅读 · 0 评论 -
【leetcode38-----数组形式的整数加法】
整数的 数组形式 num是按照从左到右的顺序表示其数字的数组。例如,对于 num = 1321 ,数组形式是 [1,3,2,1] 。给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。原创 2022-11-04 11:47:33 · 144 阅读 · 0 评论 -
【leetcode37-----有效的山脉数组】
给定一个整数数组 arr,如果它是有效的山脉数组就返回true,否则返回 false。让我们回顾一下,如果 arr满足下述条件,那么它是一个山脉数组:arr.length >= 3在0 < i< arr.length - 1条件下,存在i使得:arr[0] < arr[1] < ... arr[i-1] < arr[i]arr[i] > arr[i+1] > ... > arr[arr.length - 1]原创 2022-11-01 17:37:35 · 427 阅读 · 0 评论 -
【leetcode36-----独特的电子邮件地址】
每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以 '@' 符号分隔。除小写字母之外,电子邮件地址还可以含有一个或多个'.' 或 '+' 。例如,在alice@leetcode.com中,alice是 本地名 ,而leetcode.com是 域名 。如果在电子邮件地址的 本地名 部分中的某些字符之间添加句点('.'),则发往那里的邮件将会转发到本地名中没有点的同一地址。请注意,此规则 不适用于域名 。例如,"alice.z@leetcode.com” 和 “alicez@原创 2022-11-01 16:55:33 · 556 阅读 · 0 评论 -
【leetcode35-----卡牌分组】
给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:每组都有X张牌。组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回true。原创 2022-11-01 15:25:32 · 135 阅读 · 0 评论 -
【leetcode34----最小差值】
给你一个整数数组 nums,和一个整数 k 。在一个操作中,您可以选择 0原创 2022-10-30 17:28:10 · 544 阅读 · 0 评论 -
【leetcode33--翻转图像】
给定一个n x n的二进制矩阵image,先 水平 翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转[1,1,0]的结果是[0,1,1]。反转图片的意思是图片中的0全部被1替换,1全部被0替换。例如,反转[0,1,1]的结果是[1,0,0]。原创 2022-10-25 21:08:23 · 149 阅读 · 0 评论 -
【leetcode32-----字符的最短距离】
字符的最短距离给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。两个下标i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。原创 2022-10-25 20:48:52 · 594 阅读 · 0 评论 -
【leetcode31-----写字符串需要的行数】
我们要把给定的字符串 S从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组widths,这个数组widths[0] 代表 'a' 需要的单位,widths[1] 代表 'b' 需要的单位,...,widths[25] 代表 'z' 需要的单位。现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。原创 2022-10-24 20:21:29 · 99 阅读 · 0 评论 -
【leetcode30-----唯一摩尔斯密码词】
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串,比如:'a' 对应 ".-" ,'b' 对应 "-..." ,'c' 对应 "-.-." ,以此类推。给你一个字符串数组 words ,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,"cab" 可以写成 "-.-..--..." ,(即 "-.-." + ".-" + "-..." 字符串的结合)。我们将这样一个连接过程称作 单词翻译 。对 words 中所有单词进行单词翻译,返回不同 单词翻译原创 2022-10-24 19:49:20 · 105 阅读 · 0 评论 -
【leetcode29-----图像渲染】
本文主要介绍了深度优先和广度优先这两种经典的解法。有一幅以m x n的二维整数数组表示的图画image,其中image[i][j]表示该图画的像素值大小。你也被给予三个整数 sr ,sc 和 newColor 。你应该从像素image[sr][sc]开始对图像进行 上色填充 。为了完成 上色工作 ,从初始像素开始,记录初始坐标的 上下左右四个方向上 像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应 四个方向上 像素值与初始坐标相同的相连像素点,原创 2022-10-24 17:52:59 · 125 阅读 · 0 评论 -
【leetcode28-----托普利茨矩阵】
给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。原创 2022-10-22 20:56:10 · 357 阅读 · 0 评论 -
【leetcode27-----最短补全词】
给你一个字符串 licensePlate 和一个字符串数组 words ,请你找出words 中的 最短补全词 。补全词 是一个包含 licensePlate 中所有字母的单词。忽略licensePlate 中的 数字和空格 。不区分大小写。如果某个字母在 licensePlate 中出现不止一次,那么该字母在补全词中的出现次数应当一致或者更多。例如:licensePlate = "aBc 12c",那么它的补全词应当包含字母 'a'、'b' (忽略大写)和两个 'c' 。可能的 补全词 有 "原创 2022-10-20 17:49:03 · 354 阅读 · 0 评论 -
【leetcode26-----至少是其他数字两倍的最大数】
给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。笔者的解法是首先遍历数组找出最大值,然后遍历数组,判断除了最大值以外的其他元素的二倍是否大于最大值,若有元素的二倍大于最大值,则返回-1;若所有元素的二倍都不大于最大值,则返回最大值的下标。官解的解法是遍历数组,同时找出最大值和次大值,并记录最大值的下标,若最大值大于等于次大值的二倍,则返回最大值的下标,否则返回-1。原创 2022-10-20 17:18:00 · 111 阅读 · 0 评论 -
【leetcode25-----寻找数组的中心下标】
给你一个整数数组nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。大致思路就是首先算出数组所有元素的总和sum,然后从头遍历数组,当前遍历到的元素是nums[i],左侧数之和leftsum为当前元素左边的所有元素之和,右侧原创 2022-10-17 12:05:48 · 317 阅读 · 0 评论 -
【leetcode24-----1比特与2比特字符】
有两种特殊字符:第一种字符可以用一比特0 表示第二种字符可以用两比特(10或11)表示给你一个以 0 结尾的二进制数组bits,如果最后一个字符必须是一个一比特字符,则返回 true 。本题比较难理解的其实是题目的意思,题目的意思是按照数组的顺序从前到后遍历若当前元素是1,则和后面一个元素一起组成两比特字符,若当前元素是零,则是一比特字符,遍历到最后如果只剩一个0,则最后一个字符是一比特字符。该题的解法也是如此,从前往后遍历数组,遇到1走两步,遇到0走一步,最后若只剩一个0,返回true,原创 2022-10-15 19:37:02 · 474 阅读 · 0 评论 -
【leetcode23-----二分查找】
给定一个n个元素有序的(升序)整型数组nums 和一个目标值target ,写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。话不多说,标准二分查找实例,对于这种经典的算法,可将其当作标准代码印在脑海中。代码如下:原创 2022-10-14 20:30:37 · 138 阅读 · 0 评论 -
【leetcode22-----数组的度】
给定一个非空且只包含非负数的整数数组nums,数组的 度 的定义是指数组里任一元素出现频数的最大值。你的任务是在 nums 中找到与nums拥有相同大小的度的最短连续子数组,返回其长度。遍历数组,把元素值作为Key值存入HashMap集合,特殊的是要使用数组来存放Key值对应的Value值,数组的第一个位置存放元素出现的次数,第二个位置存放元素第一次出现时的下标,第三个位置存放元素最后一次出现时的下标,然后遍历HashMap集合,出现次数最多的元素的最后一次下标和第一次下标之差加一就是最短子数组的长度原创 2022-10-14 18:46:24 · 444 阅读 · 0 评论 -
【leetcode21-----棒球比赛】
比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循整数 x - 表示本回合新获得分数 x"+" - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。"D" - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。"C" - 表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。请你返回记录中所有得分的总和。原创 2022-10-10 20:10:46 · 127 阅读 · 0 评论 -
【leetcode20-----最长连续递增序列】
给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l原创 2022-10-10 17:20:50 · 152 阅读 · 0 评论 -
【leetcode19-----图片平滑器】
图像平滑器 是大小为3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。每个单元格的平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值)。给你一个表示图像灰度的m x n整数矩阵img,返回对图像的每个单元格平滑处理后的图像。遍历矩阵,依次计算每个原创 2022-10-07 20:37:22 · 100 阅读 · 0 评论 -
【leetcode18-----错误的集合】
集合 s 包含从 1 到n的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。首先对数组进行排序,如果丢失的数在头和尾,就把头和尾单独拿出来判断,如果第一个数nums[0]不等于1,那丢失的数就是1,如果最后一个数nums[n-1]不等于n,那丢失的数就是n,如果丢失的数在中间,对数组进行遍历原创 2022-10-07 19:56:45 · 435 阅读 · 0 评论 -
【leetcode17-----子数组最大平均数】
给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。任何误差小于 10-5 的答案都将被视为正确答案。示例 1:输入:nums = [1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75示例 2:输入:nums = [5], k = 1输出:5.00000原创 2022-10-06 20:32:08 · 2090 阅读 · 0 评论 -
【leetcode16-----三个数的最大乘积】
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。分析一下可以取得最大乘积的几种情况,就可以得出这道题的解法。如果数组中全是正数,则最大乘积就是最大的三个正数的乘积,如果数组中全是负数,则最大乘积就是最大的三个负数的乘积,如果数组中有正有负,则最大乘积可能是最小的两个负数和最大的正数的乘积,或者是最大的三个正数的乘积。综上:首先将数组排序,最大乘积就是前两个数和最后一个数的乘积与最后三个数的乘积之间的最大值。原创 2022-10-04 19:12:06 · 450 阅读 · 0 评论 -
【leetcode15-----两个列表的最小索引总和】
假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。题目讲的有些不太明白,其实题目要求的是共同喜爱的餐厅,且该餐厅索引和最小,意思就是可能有很多共同喜爱的餐厅,但要找索引和最小的。首先把list1中的元素和索引作为键值对存入HashMap中,然后遍历list2,若list2的元素存在于HashMap中,计算两个索原创 2022-10-04 11:48:09 · 92 阅读 · 0 评论 -
【leetcode14-----范围求和】
给你一个 m xn 的矩阵M,初始化时所有的 0 和一个操作数组 op ,其中 ops[i] = [ai, bi] 意味着当所有的 0原创 2022-10-03 19:59:00 · 151 阅读 · 0 评论 -
【leetcode13-----最长和谐子序列】
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。先将数组进行排序,然后用类似双指针的方法,一个指针p用for循环从前到后遍历,另一个指针q从0开始,若nums[p]-nums[q]>1,则q一直向前移动直到nums[p]-nums[q]原创 2022-10-03 19:27:14 · 115 阅读 · 0 评论 -
【leetcode12-----分糖果】
Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i]给你一个长度为 n 的整数数组 candyType ,返回: Alice 在仅吃掉 n / 2 枚糖的情况下,可以吃到糖的 最多 种类数。如果糖的种类x大于Alice可以吃的糖的数量num,则Alice只能吃num种,如果糖的种类x小于Alice可以吃的糖的数量num,则Alice只能吃x种,所以Alice能吃到的糖的种类是min(x,num)原创 2022-10-03 15:56:42 · 194 阅读 · 0 评论 -
【leetcode11-----重塑矩阵】
官解的解法十分简便,就是一个公式,把二维数组拉扁成一维数组,再由一维数组转化成r行c列的二维数组。由于是用行遍历顺序填充,行=n,列=m,把二维数组拉扁成一维数组时,二维数组中元素在一维数组中的下标(i,j)=n×i+j。把一维数组转化成r行c列的二维数组时,x为元素在一维数组中的下标,二维数组的行列下标分别i=x/r,j=x%r。给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。否则,输出原始矩阵。来源:力扣(LeetCode)原创 2022-09-30 20:17:02 · 104 阅读 · 0 评论 -
【leetcode10-----相对名次】
官解思路是将得分数组放进二维数组中,得分数组的长度为n,则二维数组的大小为n列2行,第一行放得分,第二行放每个得分在得分数组中对应的下标,然后对该二维数组按照得分的大小降序排序,最后进行遍历,前三个较高得分分别对应"Gold Medal""Silver Medal""Bronze Medal",写进答案数组,后面的将对应的名次写进答案数组。输出:["Gold Medal","Silver Medal","Bronze Medal","4","5"]输入:score = [5,4,3,2,1]原创 2022-09-30 11:52:10 · 107 阅读 · 0 评论 -
【leetcode09-----键盘行】
题解:美式键盘从上到下有三行,分别编号0,1,2,定义一个字符串存放26个英文字母所在的行编号,遍历单词数组,每遍历一个单词时,定义一个变量存放该单词第一个字母所在的行编号,然后遍历该单词后面的字母,若后面的字母与第一个字母不在一行,则跳出循环继续遍历下一个单词,否则将该单词加入集合中。输入:words = ["Hello","Alaska","Dad","Peace"]输入:words = ["adsdf","sfd"]输出:["Alaska","Dad"]输出:["adsdf","sfd"]原创 2022-09-28 20:22:23 · 91 阅读 · 0 评论 -
【leetcode08------将有序数组转换为二叉搜索树】
链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree。二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排序的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列。解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]输入:nums = [1,3]来源:力扣(LeetCode)原创 2022-09-23 15:30:13 · 86 阅读 · 0 评论 -
【leetcode07------合并两个有序数组】
给你两个按 非递减顺序 排列的整数数组nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。原创 2022-09-23 11:45:32 · 158 阅读 · 0 评论 -
【leetcode06-----插入搜索位置二分查找】
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4原创 2022-09-23 11:11:19 · 119 阅读 · 0 评论 -
【leetcode05------移除元素】
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷原创 2022-09-20 16:21:58 · 98 阅读 · 0 评论