
LeetCode刷题笔记
leetcode
QYiRen
注:本人的优快云文章皆为学习笔记方便自己查询或者需要学习的小伙伴浏览,不用于任何商业用途。来源为其他书籍或者学习视频,基本会在参考中注明,数据也基本都在里边。
展开
-
【LeetCode】Day52
2047.句子中的有效单词数句子仅由小写字母('a' 到 'z')、数字('0' 到 '9')、连字符('-')、标点符号('!'、'.' 和 ',')以及空格(' ')组成。每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格 ' ' 分隔。如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:仅由小写字母、连字符和/或标点(不含数字)。至多一个 连字符 '-' 。如果存在,连字符两侧应当都存在小写字母("a-b" 是一原创 2022-01-27 14:58:32 · 171 阅读 · 0 评论 -
【LeetCode】Day51
【LeetCode】Day51-2013.检测正方形100.相同的树给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。解法①:深度优先搜索DFS# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self....原创 2022-01-26 15:03:27 · 5764 阅读 · 0 评论 -
【LeetCode】Day50
【LeetCode】Day45-2029.石子游戏IX【LeetCode】Day46-1345.跳跃游戏IV【LeetCode】Day47-1332.删除回文子序列【LeetCode】Day48-2034.股票价格波动【LeetCode】Day49-2045.到达目的地第二最短时间1688.比赛中的配对次数给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制:如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2原创 2022-01-25 21:11:40 · 7096 阅读 · 0 评论 -
【LeetCode】Day44
【LeetCode】Day44-219.存在重复元素给你一个整数数组nums 和一个整数k ,判断数组中是否存在两个 不同的索引i和j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。解法①:直接法,超出时间限制class Solution: def containsNearbyDuplicate(self, nums: List[int], k: int) -> b...原创 2022-01-19 09:46:03 · 5656 阅读 · 0 评论 -
【LeetCode】Day43
【leetcode】Day41-382.链表随机节点【leetcode】Day42-1220.统计元音字母序列数目【leetcode】Day42-539.最小时间差给定一个 24 小时制(小时:分钟"HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。解法①:排序直接计算def getMinutes(t: str) -> int: #返回对应的分钟数,ord(str)将内部的str转化为ASCII码,减去ord("0")代表对应的整数 .原创 2022-01-18 10:36:59 · 1099 阅读 · 0 评论 -
【LeetCode】Day40
注:【LeetCode】Day39,中等,暂放1716.计算力扣银行的钱详见leetcode官方Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。最开始,他在周一的时候存入 1块钱。从周二到周日,他每天都比前一天多存入 1块钱。在接下来每一个周一,他都会比 前一个周一 多存入 1块钱。给你n,请你返回在第 n天结束的时候他在力扣银行总共存了多少块钱解法①:暴力解法class Solution: def totalMoney(self, n...原创 2022-01-15 18:16:45 · 112 阅读 · 0 评论 -
【LeetCode】Day38(简单)
747.至少是其他数字两倍的最大数给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。解法①:只要第二个最大数大于或等于第一个最大数*2即可class Solution: def dominantIndex(self, nums: List[int]) -> int: n = len(nums) if原创 2022-01-13 14:30:06 · 846 阅读 · 0 评论 -
【LeetCode】Day37-贪心算法值得学习
注:day35,day36还未完全理解。暂不写在优快云。334.递增的三元子序列给你一个整数数组nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k)且满足 i < j < k ,使得nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意...原创 2022-01-12 10:49:12 · 252 阅读 · 0 评论 -
【LeetCode】Day34
1629.按键持续时间最长的键LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。给你一个长度为 n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 i 个被按下的键。releaseTimes 是一个升序排列的列表,其中 releaseTimes[i] 表示松开第 i 个键的时间。字符串和数组的 下标都从 0 开始 。第 0 个键在时间为 0 时被按下,接下来每个键都 恰好 在前一个键松开时被按下。原创 2022-01-09 20:09:25 · 838 阅读 · 0 评论 -
【LeetCode】Day33-格雷编码-位运算
89.格雷编码n 位格雷码序列 是一个由 2n 个整数组成的序列,其中:每个整数都在范围 [0, 2n - 1] 内(含 0 和 2n - 1)第一个整数是 0一个整数在序列中出现 不超过一次每对 相邻 整数的二进制表示 恰好一位不同 ,且第一个 和 最后一个 整数的二进制表示 恰好一位不同给你一个整数 n ,返回任一有效的 n 位格雷码序列 。python位运算符:链接本题解释见:leetcode官方解答:...原创 2022-01-09 19:37:56 · 641 阅读 · 0 评论 -
【LeetCode】Day32
1614.括号的最大嵌套深度如果字符串满足以下条件之一,则可以称之为 有效括号字符串(valid parentheses string,可以简写为 VPS):字符串是一个空字符串 "",或者是一个不为 "(" 或 ")" 的单字符。字符串可以写为 AB(A 与 B字符串连接),其中 A 和 B 都是 有效括号字符串 。字符串可以写为 (A),其中 A 是一个 有效括号字符串 。类似地,可以定义任何有效括号字符串S 的 嵌套深度 depth(S):depth("") = 0depth..原创 2022-01-08 13:30:14 · 68 阅读 · 0 评论 -
【LeetCode】Day31
71.简化路径(简化目录)给你一个字符串 path ,表示指向某一文件或目录的Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..)表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格..原创 2022-01-06 19:20:47 · 107 阅读 · 0 评论 -
【LeetCode】Day30
1576.替换所有的问号给你一个仅包含小写英文字母和 '?' 字符的字符串 s,请你将所有的 '?' 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。注意:你 不能 修改非 '?' 字符。题目测试用例保证 除 '?' 字符 之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。class Solution: def modifyString(self原创 2022-01-05 20:35:30 · 95 阅读 · 0 评论 -
【LeetCode】Day29-二叉树的中序遍历
94.二叉树的中序遍历给定一个二叉树的根节点root,返回它的中序遍历详细讲解见leetcode官方二叉树的python定义: class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right解法①:递归class Solution: ...原创 2022-01-04 17:47:52 · 1581 阅读 · 0 评论 -
【LeetCode】Day28
1185.一周中的第几天给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month 和year,分别表示日、月、年。您返回的结果必须是这几个值中的一个{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。多种求解方式及详细公式讲解见leetcode讲解解法①:蔡勒公式class Solution: def dayOfTheWe..原创 2022-01-03 20:19:24 · 165 阅读 · 0 评论 -
【LeetCode】Day26&Day27
2022.将一维数组转变成二维数组给你一个下标从 0开始的一维整数数组original和两个整数m和n。你需要使用original中所有元素创建一个m行n列的二维数组。original中下标从 0到 n - 1(都 包含 )的元素构成二维数组的第一行,下标从 n到 2 * n - 1(都包含)的元素构成二维数组的第二行,依此类推。请你根据上述过程返回一个m x n的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。解答 :...原创 2022-01-02 13:34:54 · 1202 阅读 · 0 评论 -
【LeetCode】Day25
507.完美数对于一个正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。给定一个整数n,如果是完美数,返回 true,否则返回 false要想办法约束遍历的范围,否则超出时间限制,例如:class Solution: def checkPerfectNumber(self, num: int) -> bool: if num == 1: return False res = 0...原创 2021-12-31 17:00:27 · 220 阅读 · 0 评论 -
【LeetCode】Day24
846.一手顺子Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是 groupSize ,并且由 groupSize 张连续的牌组成。给你一个整数数组 hand 其中 hand[i] 是写在第 i 张牌,和一个整数 groupSize 。如果她可能重新排列这些牌,返回 true ;否则,返回 false 。示例 1:输入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3输出:true解释:Alice 手中的牌可以被重新排列为原创 2021-12-30 22:27:50 · 603 阅读 · 0 评论 -
【LeetCode】Day23
1995.统计特殊四元组给你一个 下标从 0 开始 的整数数组 nums ,返回满足下述条件的 不同 四元组 (a, b, c, d) 的 数目 :nums[a] + nums[b] + nums[c] == nums[d] ,且a < b < c <d解法①:直接枚举 def countQuadruplets(nums): n=len(nums) res = 0 for i in range(n): for j in r.原创 2021-12-29 16:05:25 · 301 阅读 · 0 评论 -
【LeetCode】Day22-滑动窗口
3.无重复字符的最长字串(滑动窗口)给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。滑动窗口(也就是滑动队列)详细讲解见:leetcode官方class Solution: def lengthOfLongestSubstring(self, s: str) -> int: #记录着当前不重复(使用集合去除重复)的连续字串 currentstr = set() n = len(s) #...原创 2021-12-28 20:14:46 · 257 阅读 · 0 评论 -
【LeetCode】Day21
88.合并两个有序数组给你两个按 非递减顺序 排列的整数数组nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。解法①:合并数.原创 2021-12-27 14:58:16 · 174 阅读 · 0 评论 -
【LeetCode】Day20
83.删除排序链表中的重复元素存在一个按升序排列的链表,给你这个链表的头节点head,请你删除所有重复的元素,使每个元素只出现一次。返回同样按升序排列的结果链表。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solut...原创 2021-12-26 11:22:08 · 246 阅读 · 0 评论 -
【LeetCode】Day19
70.爬楼梯(动态规划思想)假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。解法①:斐波那契问题,采用递归(这里会超时),加了一个缓存装饰器class Solution: @functools.lru_cache(100) def climbStairs(self, n: int) -> int: if n == 1:return 1 ...原创 2021-12-24 14:28:58 · 705 阅读 · 0 评论 -
【LeetCode】Day18
求一个数的平方根(二分查找、牛顿迭代法)原创 2021-12-23 13:52:58 · 1288 阅读 · 0 评论 -
【LeetCode】Day17
67.二进制求和给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字1和0。解答①:二进制转换为十进制计算结果后再转回二进制class Solution: def addBinary(self, a: str, b: str) -> str: num_1 = Solution.twoToTen(a) num_2 = Solution.twoToTen(b) num = num_1 + n...原创 2021-12-22 11:26:33 · 579 阅读 · 0 评论 -
【LeetCode】Day16
66.加一给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。代码①:用Python中列表与字符串、整数相互转化def plusOne(digits): string = '' for i in digits: string = string +str(i) num = str(int(string)+1)原创 2021-12-21 13:30:54 · 1281 阅读 · 0 评论 -
【LeetCode】Day15
58.最后一个单词的长度给你一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。解答①def lengthOfLastWord(s): arr = s.split() res = [] for i in arr: res.append(len(i)) return res.pop()res = lengthOfLastWord(" ..原创 2021-12-20 10:28:07 · 441 阅读 · 0 评论 -
【LeetCode】Day14
53.最大子序和给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。def maxSubArray(nums): """ 动态规划:分解成小问题,先解决小问题,当小问题解决完,即大问题也就解决了(先解后合发展一组解) 返回数组中具有最大和的连续子数组的和 动态规划算法的核心就是记住已经解决过的子问题的解 :param nums: List[int] :ret...原创 2021-12-18 17:26:29 · 101 阅读 · 0 评论 -
【LeetCode】Day13
35.搜索插入位置(二分查找)给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。python列表方法:①:class Solution: def searchInsert(self, nums: List[int], target: int) -> int: if target in nums: return原创 2021-12-17 20:40:34 · 591 阅读 · 0 评论 -
【LeetCode】Day12
28.实现strStr()函数字符串匹配--KMP算法给你两个字符串haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回-1 。对于本题而言,当needle是空字符串时我们应当返回 0 。原创 2021-12-16 16:25:48 · 1179 阅读 · 0 评论 -
【LeetCode】Day11
27.移除元素给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。python列表内置方法辅助实现def removeElement(nums, val): i = 0 while i < len(nums): if nums[i] != v...原创 2021-12-15 13:51:41 · 82 阅读 · 0 评论 -
【LeetCode】Day10
26.删除有序数组中的重复元素(双指针)给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。def removeDuplicates(nums): if len(nums) == 1: return len(nums) i = 0 j = 1 while (j < len(nums)原创 2021-12-14 14:21:04 · 1355 阅读 · 0 评论 -
【LeetCode】Day09
21.合并两个有序链表将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 :输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]方法一:迭代法# Definition for singly-linked list.class ListNode: def __init__(self, val=0, next=None): self.val = val ...原创 2021-12-13 14:55:15 · 86 阅读 · 0 评论 -
【LeetCode】Day08
20.有效的括号给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。个人解法不符合题意,是此类问题的另一种思考方式,适合括号无序随机的时候def isValid(s): """ 这个是括号顺序随机时,比如"([)]"也会返回true,题目要求则返回False 括号匹配:() [] {} :param s: :re..原创 2021-12-12 15:55:08 · 284 阅读 · 0 评论 -
【LeetCode】Day07
14.最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。参考思路:python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。..原创 2021-12-10 15:06:15 · 564 阅读 · 0 评论 -
【LeetCode】Day06
13.罗马数字转整数罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1 。12 写做XII,即为X+II。 27 写做XXVII, 即为XX...原创 2021-12-09 18:07:36 · 229 阅读 · 0 评论 -
【LeetCode】Day05
9.回文数给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。class Solution: def isPalindrome(self, x: int) -> bool: s = str(x) return s == s[::-1]回文数三种解法见优快云:https://blog.youkuaiyun.com/原创 2021-12-08 17:32:45 · 87 阅读 · 0 评论 -
【LeetCode】Day04
7.整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231,231− 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。def reverse( x) -> int: if -10 < x < 10: return x str_x = str(x) if str_x[0] != "-": str_x...原创 2021-12-07 23:09:08 · 94 阅读 · 0 评论 -
【LeetCode】Day03
1816.截断句子:句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。例如,"Hello World"、"HELLO" 和 "hello world hello world" 都是句子。给你一个句子 s 和一个整数 k ,请你将 s 截断 ,使截断后的句子仅含 前 k 个单词。返回 截断 s 后得到的句子。class Solution: def原创 2021-12-06 16:23:59 · 587 阅读 · 0 评论 -
【LeetCode】Day02
2.两数相加给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。self(未使用题目要求链表):def addTwoNumbers(l1, l2): """ 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807...原创 2021-12-04 17:05:09 · 92 阅读 · 0 评论