LeetCode刷题
每次的力拓题
菜鸟xk_110
无
展开
-
374. 猜数字大小
374. 猜数字大小解题思路二分查找代码 def guessNumber(self, n: int) -> int: st, sp = 1, n while st < sp: mid = (st + sp) // 2 if guess(mid)<= 0: sp = mid else: st = mid + 1原创 2021-10-31 11:04:44 · 67 阅读 · 0 评论 -
392. 判断子序列
392. 判断子序列解题思路使用双指针进行判断,当遇到不同元素时长指针加一,否则长短指针均加一。代码 def isSubsequence(self, s: str, t: str) -> bool: if s == '': return True ps = 0 pt = 0 while ps < len(s) and pt < len(t): if s[ps] ==原创 2021-10-31 11:00:11 · 71 阅读 · 0 评论 -
232. 用栈实现队列
232. 用栈实现队列解题思路使用两个栈来回倒,一个栈表示入队的,一个栈表示出队的。代码class MyQueue: def __init__(self): self.stack_in = [] self.stack_out = [] def push(self, x: int) -> None: self.stack_in.append(x) def pop(self) -> int: if s原创 2021-10-31 10:54:49 · 74 阅读 · 0 评论 -
242. 有效的字母异位词
242. 有效的字母异位词解题思路使用一个大小为26的数组来存放单词数量,数组下标对应不同字母代码 def isAnagram(self, s: str, t: str) -> bool: li = [0] * 26 for i in s: li[ord(i)-97] += 1 for j in t: li[ord(j)-97] -= 1 return li == [0]*26原创 2021-10-31 10:50:25 · 55 阅读 · 0 评论 -
190. 颠倒二进制位
190. 颠倒二进制位解题思路简单的位运算便可实现,1或1=1,1或0=01 或 1=1,1或0=01或1=1,1或0=0代码 def reverseBits(self, n: int) -> int: # 位运算 ans = 0 for i in range(32): ans = (ans << 1) + (n & 1) n >>= 1 ret原创 2021-10-31 10:45:47 · 57 阅读 · 0 评论 -
724. 寻找数组的中心下标
724. 寻找数组的中心下标解题思路数学问题,通过找规律得到解题方式,设数组和为total,第i个元素的左侧元素和为sum,则当2∗sum+nums[i]=total2*sum+nums[i]=total2∗sum+nums[i]=total时左右侧元素相等。代码 def pivotIndex(self, nums: List[int]) -> int: total = sum(nums) sum_l = 0 for i in range(原创 2021-10-30 20:54:55 · 83 阅读 · 0 评论 -
766. 托普利茨矩阵
766. 托普利茨矩阵解题思路使用暴力法破解,又题目定义可以知道当矩阵的每个元素都与其左上角元素相等的情况下,该矩阵为托普利茨矩阵。所以直接遍历该矩阵,将每一个元素和它左上角的元素相比对即可。代码 def isToeplitzMatrix(self, matrix: List[List[int]]) -> bool: row = len(matrix) column = len(matrix[0]) cur_r = 0 cu原创 2021-10-30 20:45:16 · 148 阅读 · 0 评论 -
125. 验证回文串
125. 验证回文串解题思路验证回文串最直接的方法就是使用栈来进行判断,先将字符入栈,再出栈与原字符相比较。还可以使用双指针,一个指针从头开始,一个指针从尾开始,直到两指针相遇,如果遇到不相同的则不是回文串。代码 def isPalindrome(self, s: str) -> bool: if s is None: return True s = s.lower() # 使用栈 # stack原创 2021-10-30 20:40:48 · 92 阅读 · 0 评论 -
58. 最后一个单词的长度
58. 最后一个单词的长度解题思路先将字符串按空格分开,放到列表中,再计算列表的最后一个元素的长度。代码def lengthOfLastWord(s: str) -> int: x = s.split(' ') for i in x[::-1]: if i != '': return len(i) return 0运行结果...原创 2021-10-29 20:00:21 · 66 阅读 · 0 评论 -
28. 实现 strStr()
28. 实现 strStr()解题思路暴力匹配,在长字符串中通过匹配短字符串长度的字符来得到。代码def find(haystack, needle): # 暴力解法 if needle is None: return 0 if len(haystack) < len(needle): return -1 i, j = 0, 0 for i in range(len(haystack)): if hayst原创 2021-10-29 19:53:24 · 79 阅读 · 0 评论 -
最长上升子序列
最长上升子序列题目描述:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [原创 2021-07-13 21:03:41 · 73 阅读 · 0 评论 -
LeetCode452.用最少数量的箭引爆气球
LeetCode452.用最少数量的箭引爆气球1.题目描述:在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之原创 2020-12-17 14:20:46 · 66 阅读 · 0 评论 -
LeetCode242.有效的字母异位词
LeetCode242.有效的字母异位词1.题目描述:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。2.解题思路:直接用Python内置的collections库中的Counter函数来对字符串中的字母进行计数,然后再比较一下3.Python实现:原创 2020-11-24 21:45:42 · 54 阅读 · 0 评论 -
LeetCode283.移动零
LeetCode283.移动零1.题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2.解题思路:先把原数原创 2020-11-20 21:30:10 · 55 阅读 · 0 评论 -
LeetCode1030.距离顺序排列矩阵单元格
LeetCode030.距离顺序排列矩阵单元格1.题目描述:给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的原创 2020-11-17 21:59:38 · 75 阅读 · 0 评论 -
LeetCode69.X的平方根
LeetCode69.X的平方根1.题目描述:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。2.解题思路:...原创 2020-11-16 21:25:50 · 61 阅读 · 0 评论 -
LeetCode922.按奇偶排序数组
LeetCode922.按奇偶排序数组1.题目描述:给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。示例:输入:[4,2,5,7]输出:[4,5,2,7]解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。提示:2 <= A.length <= 20000A.length % 2 == 00原创 2020-11-16 20:45:34 · 274 阅读 · 0 评论 -
LeetCode31.下一个排列
LeetCode31. 下一个排列1.题目描述:实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输入:nums = [1]输原创 2020-11-14 21:51:51 · 143 阅读 · 0 评论 -
LeetCode69.X的平方根
LeetCode69.x的平方根1.题目描述:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sqrtx2.解题思路:由于 x平方根的原创 2020-11-11 08:42:03 · 84 阅读 · 0 评论 -
LeetCode7.整数反转
Leetcode7.整数反转1.题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。2.解题思路:先将输入的数字的绝对值转换为字符串,之后进行字符串反转,如果是负数就在前面加“ -原创 2020-11-11 08:25:55 · 181 阅读 · 0 评论 -
LeetCode 1640.能否连接形成数组
LeetCode1640.能否连接形成数组1.题目描述:给你一个整数数组 arr ,数组中的每个整数 互不相同 。另有一个由整数数组构成的数组 pieces,其中的整数也 互不相同 。请你以 任意顺序 连接 pieces 中的数组以形成 arr 。但是,不允许 对每个数组 pieces[i] 中的整数重新排序。如果可以连接 pieces 中的数组形成 arr ,返回 true ;否则,返回 false 。示例 1:输入:arr = [85], pieces = [[85]]输出:true示例原创 2020-11-08 16:19:43 · 239 阅读 · 0 评论 -
LeetCode1356.根据数字二进制下 1 的数目排序
LeetCode1356.根据数字二进制下 1 的数目排序题目描述:给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。示例 1:输入:arr = [0,1,2,3,4,5,6,7,8]输出:[0,1,2,4,8,3,5,6,7]解释:[0] 是唯一一个有 0 个 1 的数。[1,2,4,8] 都有 1 个 1 。[3,5,6] 有 2 个 1 。[7原创 2020-11-07 15:03:54 · 72 阅读 · 0 评论 -
LeetCode1470.重新排列数组
LeetCode重新排列数组1.题目描述:给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,…,xn,y1,y2,…,yn] 的格式排列。请你将数组按 [x1,y1,x2,y2,…,xn,yn] 格式重新排列,返回重排后的数组。示例 1:输入:nums = [2,5,1,3,4,7], n = 3输出:[2,3,5,4,1,7]解释:由于 x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 ,所以答案为 [2,3,5,4,1,7]示例 2:输入:nums原创 2020-11-05 09:22:27 · 147 阅读 · 0 评论 -
LeetCode941.有效的山脉数组
LeetCode941.有效的山脉数组1.题目描述:给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:A.length >= 3在 0 < i < A.length - 1 条件下,存在 i 使得:A[0] < A[1] < … A[i-1] < A[i]A[i] > A[i+1] > … > A[A.length - 1]示例 1:输入:原创 2020-11-03 18:52:57 · 142 阅读 · 0 评论 -
LeetCode 349.两个数组的交集
LeetCode349. 两个数组的交集1.题目描述:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]2.解题思路:计算两个数组的交集,最直观的方法是遍历数组 nums1,对于其中的每个元素,遍历数组 nums2 判断该元素是否在数组 nums2 中,如果存在,则将该元素添加到返回值。3.Pyth原创 2020-11-03 18:29:18 · 67 阅读 · 0 评论