LeetCode
Windy.Zhhh
记录学习
展开
-
LeetCode#136. 只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。开始审题不清楚,自己又构造了一个列表,解出了这道题。题目要求只使用常量额外空间,考虑异或运算。来源:力扣(LeetCode)原创 2023-01-27 14:43:53 · 104 阅读 · 0 评论 -
LeetCode#55. 跳跃游戏
我们遍历数组中的每一个元素,如果其中不包含0,那么就非True无疑了,其他情况下,第一个元素是0,但是列表中元素不止一个,必定是False,最后一种情况下,我们找到0,再把0前元素的值与下标的差来作比较即可判断。又想了一个简单的动态规划的算法,但是有许多重复操作,导致最后提交还超时了。来源:力扣(LeetCode)最终动态规划改良后终于通过了。...原创 2022-08-29 16:48:19 · 96 阅读 · 0 评论 -
LeetCode#2379. 得到 K 个黑块的最少涂色次数
给你一个长度为 n 下标从 0 开始的字符串 blocks ,blocks[i] 要么是 'W' 要么是 'B' ,表示第 i 块的颜色。字符 'W' 和 'B' 分别表示白色和黑色。这道题可以理解为在每k个代码块里面找出包含'W'最少的代码块,计算其内包含'W'的个数即可。一种得到 7 个连续黑色块的方法是把第 0 ,3 和 4 个块涂成黑色。输入:blocks = "WBWBBBW", k = 2。blocks[i] 要么是 'W' ,要么是 'B'。不需要任何操作,因为已经有 2 个连续的黑块。...原创 2022-08-29 10:57:55 · 1003 阅读 · 0 评论 -
LeetCode#74.搜索二维矩阵(Python)
第一种方法就是根据题目,然后按照自己的理解慢慢写出来的(第一眼想到的解法并没有用二分查找😂,但是写出来后发现运行的也不算慢)写完后再一想,突然悟到这就不是一个单调递增的数列吗😂,用二分查找来解答应该才是出题的本意。本来英语就是弱项,复习英语四级实在太难受,听力听不懂,不听了,写个程序题换换脑子🤣。还有一种极其简单的判断方法,我本以为这个方法会超时,谁知道算的也挺快🤣。来源:力扣(LeetCode)原创 2022-08-23 01:28:40 · 165 阅读 · 0 评论 -
LeetCode#20.有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true作者:力扣 (LeetCode)链接:力扣 先进行分析我们了原创 2022-06-15 00:00:38 · 83 阅读 · 0 评论 -
LeetCode#141.环形链表
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示原创 2022-06-01 21:06:28 · 75 阅读 · 0 评论 -
LeetCode#234. 回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。示例 1:输入:head = [1,2,2,1]输出:true示例 2:输入:head = [1,2]输出:false来源:力扣(LeetCode)链接:力扣 我有两种想法来做,但都是需要先建立一个列表,来储存链表中每个节点的数据值。方法一:用列表的索引切片来直接判断。方法二:用双指针来判断。原创 2022-06-01 17:16:19 · 66 阅读 · 0 评论 -
LeetCode#206. 反转链表
题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]来源:力扣(LeetCode)链接:https://leetcode.cn/problems/reverse-linked-list我的方法比较简单,并没有使用栈。与LeetCode#21. 合并两个.原创 2022-05-15 21:57:21 · 268 阅读 · 0 评论 -
LeetCode#21. 合并两个有序链表(Python)
题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]来源:力扣(LeetCode)链接:https://leetcode.cn/problems/merge-two-sorted-lists我.原创 2022-05-15 21:47:18 · 522 阅读 · 0 评论 -
LeetCode#62. 不同路径
题目:一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 ->..原创 2022-02-11 13:47:47 · 77 阅读 · 0 评论 -
LeetCode#268. 丢失的数字
题目:给定一个包含 [0, n]中n个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。示例 1:输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 2:输入:nums = [0,1]输出:2解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。示...原创 2022-02-11 00:05:09 · 311 阅读 · 0 评论 -
LeetCode#2062. 统计字符串中的元音子字符串
题目:子字符串 是字符串中的一个连续(非空)的字符序列。元音子字符串 是 仅 由元音('a'、'e'、'i'、'o' 和 'u')组成的一个子字符串,且必须包含 全部五种 元音。给你一个字符串 word ,统计并返回 word 中 元音子字符串的数目 。示例 1:输入:word = "aeiouu"输出:2解释:下面列出 word 中的元音子字符串(斜体加粗部分):- "aeiouu"- "aeiouu"示例 2:输入:word = "unicornarihan"输出原创 2022-02-10 13:39:29 · 352 阅读 · 0 评论 -
LeetCode#36. 有效的数独
题目:请你判断一个9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用'.'表示。示例 1:输入:board =[["5","3",".",".","7","."...原创 2022-02-09 23:42:30 · 273 阅读 · 0 评论 -
LeetCode#19. 删除链表的倒数第 N 个结点
这道题我们可以先得到链表的节点数之和(这里我用count来表示),然后判断当特殊情况(要求删除第一个节点)和常规情况下的操作,再进行相应的步骤即可。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def ...原创 2022-02-08 23:48:28 · 200 阅读 · 0 评论 -
LeetCode#237. 删除链表中的节点
请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:指定链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9示例 2:输入:head = [4,5,1,9], node = 1输出:[4,5,9..原创 2022-02-07 23:52:38 · 69 阅读 · 0 评论 -
LeetCode#118. 杨辉三角
题目:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例2:输入: numRows = 1输出: [[1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/pascals-triangle这道题并不难..原创 2022-02-07 00:10:11 · 91 阅读 · 0 评论 -
LeetCode#13. 罗马数字转整数(Python)
题目:罗马数字包含以下七种字符: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+V+II...原创 2022-02-06 19:10:57 · 190 阅读 · 0 评论 -
LeetCode#204. 计数质数
统计所有小于非负整数n的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-primes这道题我们采用埃拉托色尼筛选法_百度百科class Solution: def countPrimes(s...原创 2022-02-05 23:40:11 · 513 阅读 · 0 评论 -
LeetCode#412. Fizz Buzz
题目(力扣):给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:answer[i] == "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。answer[i] == "Fizz" 如果 i 是 3 的倍数。answer[i] == "Buzz" 如果 i 是 5 的倍数。answer[i] == i (以字符串形式)如果上述条件全不满足。示例 1:输入:n = 3输出:["1",.原创 2022-02-05 21:31:11 · 435 阅读 · 0 评论 -
LeetCode#198. 打家劫舍
题目(LeetCode):你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3...原创 2022-02-04 19:59:39 · 82 阅读 · 0 评论 -
LeetCode#53. 最大子数组和
题目:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23该题仍然是动态规划问题,我们可以得到前n个元素的和,然后一次计算,最原创 2022-02-04 15:18:29 · 494 阅读 · 0 评论 -
LeetCode#121. 买卖股票的best时机(Python)
题目(来自力扣):给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 =原创 2022-02-03 00:13:28 · 92 阅读 · 0 评论 -
LeetCode#70. 爬楼梯(Python)
题目(来源力扣):假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶提示:1 <= n <= 45这道题让我们求爬到第n层有原创 2022-02-01 21:11:04 · 1017 阅读 · 0 评论 -
LeetCode#278. 第一个错误的版本(Python)
题目(来自力扣):你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例.原创 2022-02-01 15:20:43 · 221 阅读 · 0 评论 -
LeetCode#88. 合并两个有序数组(Python)
题目(来源力扣):给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例 1:输入:原创 2022-01-30 22:15:02 · 488 阅读 · 1 评论 -
LeetCode#14. 最长公共前缀(Python)
题目:(来源力扣)编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。我的解法是先得到strs[0],把strs[0]作为它与自己的公共前缀,然后再依次与第二、第三、第四……求最长的公共前缀,如果判断过程中得到某次循环后公共前缀原创 2022-01-29 18:03:28 · 105 阅读 · 0 评论 -
LeetCode#38. 外观数列(Python)
题目:给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列: countAndSay(1) = "1" countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:1. 12. 113. 214. 12115. 111221第一项是数字 1描...原创 2022-01-28 22:50:18 · 268 阅读 · 2 评论 -
LeetCode#剑指 Offer 10- I. 斐波那契数列(Python)
题目:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。用递归方法我已经发过一遍了,还有另外一种借鉴别的大神的方法????,比较有原创 2022-01-27 22:32:59 · 642 阅读 · 0 评论 -
LeetCode#8. 字符串转换整数 (atoi)
题目:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步...原创 2022-01-27 17:28:49 · 70 阅读 · 0 评论 -
LeetCode#125. 验证回文串
题目:本题验证字符串s是否为回文串,在验证之前,我们首先要去掉s中包含的空格和标点符号,何以用一下代码来去除: c="" English="1234567890abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM" for j in s: if j in English: c+=j c=c.lower()去除之后得到了新的原创 2022-01-27 00:33:05 · 1032 阅读 · 1 评论 -
LeetCode#242. 有效的字母异位词(Python)
题目:这道题给了两个字符串,分别是s和t,要求我们判断其中每个字母出现的此时是否相同。因为都是,英文字母嘛,我们就知道了所有可能出现的字符,即是:English="abcdefghijklmnopqrstuvwxyz"我们可以先遍历English,利用Python中的.count()函数来计算字符出现的次数(如果未出现那就是0了),如果相等,再做接下来的判断即可。class Solution: def isAnagram(self, s: str, t: str) -> b原创 2022-01-26 23:35:59 · 70 阅读 · 0 评论 -
LeetCode#387. 字符串中的第一个唯一字符
题目:方法一:这道题是要求我们知道 字符串s中每个字母出现的次数。起初我想到的是先便利s中的每一个字母,然后再用count来计算每个字母出现的次数,但是这种算法是较慢的。class Solution: def firstUniqChar(self, s: str) -> int: for i in s: if s.count(i)==1: return s.index(i) return原创 2022-01-25 12:15:32 · 331 阅读 · 0 评论 -
LeetCode#7. 整数反转(Python)
题目:从例子中我们可以知道这道题要求的是把整数反转(其中需要注意的是反转后得到的整数首个数字不能是0,且最后的要是数字不能是"-"号)。e.g.01234和321-都是不符号要求的。我想到先把给定的数字x无论是正负,都先看作是正数(负数的话最后加一个负号就行)来计算,而Python的字符串切片来实现反转比较容易想到,所以我们只需str(x)就可以实现。最后别忘了对反转后整数是否超过 32 位的有符号整数的判断。以下是代码:class Solution:原创 2022-01-24 00:35:41 · 298 阅读 · 0 评论 -
LeetCode#48. 旋转图像(Python)
题目:本题要求是在原地旋转图像。 第一次我并没有在“原地”旋转,答案是提交不了的。在原地旋转时,我们能有一下的做法:1.先将上下行进行交换(不仅限于最上和最下的两行)2.将交换后的图像按从左上角到右下角的数字以对角线划分,对角线两边的数字进行交换。以下是代码:class Solution: def rotate(self, matrix: List[List[int]]) -> None: """ Do not return anyth原创 2022-01-18 21:13:13 · 673 阅读 · 0 评论 -
LeetCode#350. 两个数组的交集 II
题目:求两个数组的交集,我们可以使用双指针法来求 出两个数组的交集。具体步骤如下:先对两个数组进行排序,然后使用两个指针,分别指向两个数组开始的位置。1.如果两个指针指向的值相同,说明这个值是他们的交集,就把这个值加入到集合list中,然后两个指针在分别往后移一步。2.如果两个指针指向的值不同,那么指向的值相对小的往后移一步,相对大的先不动,然后再比较。这就是双指针法,下面就是实现它的代码。class Solution: def intersect(self, num原创 2022-01-17 16:30:00 · 229 阅读 · 0 评论 -
LeetCode#189. 轮转数组
题目:我们可以把这个数组nums分为两个部分,前半段和后半段,只需把后半段提前就可以。但这就出现了一个问题,当k>len(nums)时要怎么办?仔细想一下,会发现当k=len(nums)时,nums是不会发生改变的,故我们只需:if k > len(nums):k-=len(nums)即可。再根据索引切片,自然就能求得最后答案。class Solution: def rotate(self, nums: List[int], k: int) ->原创 2022-01-14 22:44:37 · 132 阅读 · 0 评论 -
LeetCode#122. 买卖股票的时机 II
题目:这道题我们分析一下若是像示例1这样,prices=[7,1,5,3,6,4]我们是在第二天买,第三天卖,第四天买,第五天卖毋庸置疑的。如果prices=[1,2,3]那我们在第一天买,第三天卖的利润显然是最大的,这其实也等价于在第一天买,在第二天卖,紧接着在第二天再买入,在第三天卖出。所以经过这样一分析,就不难得到如下的代码了。class Solution: def maxProfit(self, prices: List[int]) -> int:原创 2022-01-13 21:06:34 · 137 阅读 · 0 评论 -
LeetCode#26. 删除有序数组中的重复项
题目:方法一:我首先是采用了一种正序删除重复元素的方法,但是这种方法需要注意的是索引数组元素的下标在删除某一个元素后是会发生改变的 。class Solution: def removeDuplicates(self, nums: List[int]) -> int: if len(nums)==1 or len(nums)==0: return len(nums) long=len(nums)-1;target=num原创 2022-01-13 20:58:13 · 121 阅读 · 0 评论 -
LeetCode#1780. 判断一个数字是否可以表示成三的幂的和(Python)
这是这道题的题目(截屏的,我就不再打出来了,请谅解。)我们先分析一下题目,可以看出,这是有关定义26进制转换的题目 ,这里就需要用到Python中有关求商和余数的函数(divmod原创 2022-01-13 17:40:14 · 396 阅读 · 0 评论 -
LeetCode#4. 寻找两个正序数组的中位数(Python)
题目是求正序数列的中位数,我们可以首先合并两个数列。#方法一:nums1.extend(nums2)#方法二:nums3=nums1+nums2然后把得到的数列排列为正序:用sl来表示排序后的数列再根据数列中数的个数是奇数还是偶数来分类计算即可.class Solution: def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float: nu...原创 2022-01-12 20:48:12 · 276 阅读 · 0 评论