leetcode题解
文章平均质量分 59
s白龙鱼服s
这个作者很懒,什么都没留下…
展开
-
判断国际象棋棋盘中一个格子的颜色
原题指路判断国际象棋棋盘中一个格子的颜色解题思路也是一道很水的题……只需要将其中的字母坐标变换为数字,判断两个坐标之和的奇偶性即可。奇数:白色偶数:黑色时间复杂度:O(1)O(1)O(1)空间复杂度:O(1)O(1)O(1)代码class Solution: def squareIsWhite(self, coordinates: str) -> bool: dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5,原创 2021-05-05 20:48:37 · 388 阅读 · 0 评论 -
截断句子
原题指路截断句子解题思路emmmmmm一道挺水的题,可以直接用split()函数取空格作为截断,然后新建一个列表,最后在各元素之间插入空格组成一个新字符串。时间复杂度:O(k)O(k)O(k)空间复杂度:O(s.length)O(s.length)O(s.length)代码class Solution: def truncateSentence(self, s: str, k: int) -> str: temp = [n for n in s.split()]原创 2021-05-05 20:33:41 · 184 阅读 · 0 评论 -
查找用户的活跃分钟数
原题指路查找用户的活跃分钟数解题思路这道题由于用户的ID值过于随机,所以在记录用户活跃分钟数的时候同样采用了哈希表的方式进行记录。此外,由于用户在同一个时间点可能进行多个操作,但是只会将这个时间点记为一个活跃分钟数,所以可以采用哈希表进行时间点是否重复的判断。时间复杂度:O(n)O(n)O(n)(最坏情况下为O(n2)O(n^2)O(n2))空间复杂度:O(n)O(n)O(n)代码class Solution: def findingUsersActiveMinutes(self,原创 2021-05-05 20:23:39 · 199 阅读 · 0 评论 -
采购方案
原题指路采购方案解题思路刚开始看到这道题的时候,我大意了,以为简单题就可以直接双重循环暴力通过,然而……O(n2)O(n^2)O(n2)的做法果然被卡住了。因此,这道题需要至少O(nlogn)O(n\log{n})O(nlogn)的做法来解决,因此采用先排序而后二分搜索的方法来进行解决。时间复杂度:O(nlogn)O(n\log{n})O(nlogn)(排序和主循环体均为O(nlogn)O(n\log{n})O(nlogn))空间复杂度:O(1)O(1)O(1)代码class Solu原创 2021-05-04 21:54:23 · 92 阅读 · 0 评论 -
Pow(x, n)
原题指路Pow(x, n)解题思路看到pow函数,上来就是一个快速幂。快速幂递归式xn={xn−1⋅x,ifnisoddxn2⋅xn2,ifninevenbutnot01,ifnis0x^n=\left\{\begin{array}{l}x^{n-1}\cdot x,&&if&n&is&odd\\x^{\frac{n}{2}}\cdot x^{\frac{n}{2}},&&if&n&in&even&b原创 2021-04-15 17:32:31 · 104 阅读 · 0 评论 -
整数转罗马数字
原题指路整数转罗马数字解题思路根据罗马数字的规定,从左到右每次都要选择尽可能大的罗马数字符号,所以……这简直是天然就满足贪心选择性质和最优子结构性质。因此,我们可以先建立一个罗马数字与整数相互转换的列表(从大到小进行排列的一张哈希表),然后通过遍历这个列表,每次向答案中加入当前整数所能包含的最大的罗马数字符号。时间复杂度:O(1)O(1)O(1)空间复杂度:O(1)O(1)O(1)代码class Solution: ''' 用于将整数转化为罗马数字的模块 '''原创 2021-04-15 13:59:40 · 87 阅读 · 0 评论 -
替换字符串中的括号内容
原题指路替换字符串中的括号内容题目描述给你一个字符串 s ,它包含一些括号对,每个括号中包含一个 非空 的键。比方说,字符串 "(name)is(age)yearsold" 中,有 两个 括号对,分别包含键 "name" 和 "age" 。你知道许多键对应的值,这些关系由二维字符串数组 knowledge 表示,其中 knowledge[i] = [keyi, valuei] ,表示键 keyi 对应的值为 valuei 。你需要替换 所有 的括号对。当你替换一个括号对,且它包含的键为 ke原创 2021-03-29 22:26:38 · 1011 阅读 · 0 评论 -
还原排列的最少操作步数
原题指路添加链接描述题目描述给你一个偶数n ,已知存在一个长度为 n 的排列 perm ,其中 perm[i] == i(下标 从 0 开始 计数)。一步操作中,你将创建一个新数组 arr ,对于每个 i :如果 i % 2 == 0 ,那么 arr[i] = perm[i / 2]如果 i % 2 == 1 ,那么 arr[i] = perm[n / 2 + (i - 1) / 2]然后将 arr 赋值给 perm 。要想使 perm 回到排列初始值,至少需要执行原创 2021-03-29 22:12:46 · 214 阅读 · 0 评论 -
字符串中不同整数的数目
原题指路字符串中不同整数的数目题目描述给你一个字符串 word ,该字符串由数字和小写英文字母组成。请你用空格替换每个不是数字的字符。例如,"a123bc34d8ef34" 将会变成 " 123 34 8 34" 。注意,剩下的这些整数为(相邻彼此至少有一个空格隔开):"123"、"34"、"8" 和 "34" 。返回对 word 完成替换后形成的 不同 整数的数目。只有当两个整数的 不含前导零 的十进制表示不同, 才认为这两个整数也不同。解题思路python里的切片和字典对这题来说简直就原创 2021-03-28 20:07:24 · 187 阅读 · 0 评论 -
积压订单中的订单总数
原题指路积压订单中的订单总数题目描述给你一个二维整数数组 orders ,其中每个 orders[i] = [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。订单类型 orderTypei 可以分为两种:0 表示这是一批采购订单 buy1 表示这是一批销售订单 sell注意,orders[i] 表示一批共计 amounti 笔的独立订单,这些订单的价格和类型相同。对于所有有效的 i ,由 or原创 2021-03-28 19:45:24 · 270 阅读 · 0 评论 -
设计一个验证系统
原题指路设计一个验证系统题目描述你需要设计一个包含验证码的验证系统。每一次验证中,用户会收到一个新的验证码,这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新了,那么它会在 currentTime (可能与之前的 currentTime 不同)时刻延长 timeToLive 秒。请你实现 AuthenticationManager 类:AuthenticationManager(int timeToLive) 构造 AuthenticationManag原创 2021-03-27 17:49:53 · 456 阅读 · 0 评论 -
最大升序子数组和
原题指路最大升序子数组和题目描述给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。子数组是数组中的一个连续数字序列。已知子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,若对所有 i(l <= i < r),numsi < numsi+1 都成立,则称这一子数组为 升序 子数组。注意,大小为 1 的子数组也视作 升序 子数组。解题思路这道题用动态规划即可解决问题,在每次递增子数组结束时,用状态转移原创 2021-03-26 21:29:06 · 226 阅读 · 0 评论 -
仅执行一次字符串交换能否使两个字符串相等
原题指路仅执行一次字符串交换能否使两个字符串相等题目描述给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。解题思路满足题目要求的情况只有以下两种:s1和s2完全相同;s1和s2只有两个对应位置的元素不同。所以循环遍历一次字符串进行判断即可。时间复杂度:O(n)O(n)O原创 2021-03-23 21:49:43 · 760 阅读 · 0 评论 -
字符串中第二大的数字
原题指路字符串中第二大的数字题目描述给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。混合字符串 由小写英文字母和数字组成。解题思路这题如果字符串处理的方式比较熟悉的话,做起来还挺容易的。说来也神奇,这处理字符串的几个函数有些还是我前几天刚学的,结果周赛里马上就用上了。首先,我们要将字符串中的字母过滤掉,然后再删除其中重复的数字,然后再进行排序,最后就可以直接找到第二大的元素啦~时间复杂度:O(nlogn)O(n \log{n})O(原创 2021-03-22 19:46:11 · 926 阅读 · 0 评论 -
找出星型图的中点
原题指路找出星型图的中点题目描述有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 ui 和 vi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。解题思路这道题有个十分关键的信息——只有中心点才会有n−1n-1n−1条与之关联的边,即整张图中只有一个点的度为n−1n-1n−1,且为原创 2021-03-16 20:59:34 · 201 阅读 · 0 评论 -
删除字符串中的所有相邻重复项
原题指路删除字符串中的所有相邻重复项题目描述给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。解题思路没什么技巧,直接用栈就行了。时间复杂度:O(n)O(n)O(n)空间复杂度:O(n)O(n)O(n),最坏情况下,栈的深度为n−1n-1n−1。代码class Solution: def removeDuplicates(self原创 2021-03-09 21:42:34 · 167 阅读 · 0 评论 -
下一个更大元素 II
原题指路下一个更大元素 II题目描述给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。解题思路emmmmmm首先吐槽一下本题的中文题干,看不懂什么意思的建议直接看英文题干。这道题用到的方法为单调栈+循环数组。单调栈:栈底到栈顶是单调的。这道题需要在遍历循环数组的同时维护一个单调递减栈:循环数组:原创 2021-03-07 21:44:33 · 94 阅读 · 0 评论 -
二维区域和检索
原题指路二维区域和检索题目描述给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。解题思路虽然这道题变成了对二维数组求解,但和之前做的区域和检索本质上并没有区别。因为都可以对数组进行预处理,所以仍然可以采用前缀和的思路。不过这次可以采用二维前缀和。定义sum[i+1][j+1]=sum[i][j+1]+sum[i+1][j]−sum[i][j]+matrix[i][j]sum[i + 1][j + 1] = su原创 2021-03-05 21:25:06 · 154 阅读 · 0 评论 -
用栈实现队列
原题指路用栈实现队列题目描述请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/p原创 2021-03-05 21:02:02 · 70 阅读 · 0 评论 -
俄罗斯套娃信封问题
原题指路俄罗斯套娃信封问题题目描述给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。解题思路困难题就直接参考一波官方题解……首先,在套娃前进行准备工作,对信封按照第一维www进行升序排列,先得到一个www的递增序列;其次,为了防止后面迭代过程中出错,原创 2021-03-04 21:11:35 · 130 阅读 · 0 评论 -
区域和检索
原题指路区域和检索题目描述给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(也就是 sum(nums[i], nums[i + 1], ... , nums[j]))解题思路由于这道题存在预处原创 2021-03-03 22:24:11 · 205 阅读 · 0 评论 -
至少有 K 个重复字符的最长子串
原题指路至少有 K 个重复字符的最长子串题目描述给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。解题思路这道题有别于一般的“滑动窗口”的题目,因为这道题窗口的维护条件需要人为添加一项,即窗口中的字符种类数。虽然这看起来很复杂,但是由于这题的数据范围限制在小写字母集之内,所以可以直接枚举1-26种字母即可。移动边界时窗口需维护的变量有:窗口内的字符种类数tot;窗口内出现次数小于k次的字符的数量less原创 2021-02-27 21:16:16 · 344 阅读 · 0 评论 -
转置矩阵
** 原题指路 **转置矩阵题目简介给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。解题思路也没啥好方法,就直接建立一个二维数组,然后一个个替换。时间复杂度:O(mn)空间复杂度:O(mn)代码class Solution: def transpose(self, matrix: List[List[int]]) -> List[List[int]]: m,n=le原创 2021-02-25 21:18:06 · 216 阅读 · 0 评论 -
翻转图像
原题指路翻转图像题目描述给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是[1, 0, 0]。解题思路这题比较简单,双指针遍历数组就行了,不过太过暴力也不好,所以需要用点小技巧。我们发现,当前后指针所指元素不同时,翻转时不需要进行任何操作;而当前原创 2021-02-24 22:34:39 · 102 阅读 · 0 评论 -
爱生气的书店老板
原题指路爱生气的书店老板题目描述今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。请你返原创 2021-02-24 00:56:09 · 69 阅读 · 0 评论 -
公平的糖果棒交换
原题指路公平的糖果棒交换题目描述爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。如果有多个答案,你可以返回其中任何一个。保证答案存在。解题思路今天第一次用P原创 2021-02-01 23:28:00 · 105 阅读 · 0 评论 -
最小体力消耗路径
原题指路最小体力消耗路径题目描述你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。一条路径耗费的 体力值 是路径上相邻格子之间 高度差绝对值 的 最大值原创 2021-01-29 21:23:25 · 171 阅读 · 0 评论 -
寻找数组的中心索引
原题指路寻找数组的中心索引题目描述给你一个整数数组 nums,请编写一个能够返回数组 “中心索引” 的方法。数组 中心索引 是数组的一个索引,其左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,返回 -1 。如果数组有多个中心索引,应该返回最靠近左边的那一个。注意:中心索引可能出现在数组的两端。解题思路1、首先求出数组长度,若长度为0,可直接返回-1,即找不到;2、接着调用STL库函数accumulate函数求出从数组第2个元素到数组最后一个元素的元素和,记为total原创 2021-01-28 19:37:42 · 233 阅读 · 0 评论