LeetCode算法笔记
年中初界
这个作者很懒,什么都没留下…
展开
-
leetcode-326-3的幂
leetcode算法记录原创 2022-06-16 10:07:43 · 214 阅读 · 1 评论 -
leetcode 9-回文数
给你一个整数,如果x是一个回文整数,返回True;否则,返回False。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文数,123不是。class Solution: def isPalindrome(self, x: int) -> bool: if x < 0: return False else: x = str(x) if x == x[::原创 2021-12-05 17:12:48 · 56 阅读 · 0 评论 -
leetcode-11-盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输入:height =原创 2022-05-22 10:00:06 · 91 阅读 · 0 评论 -
leetcode 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 + V + II 。通常原创 2021-12-08 23:37:23 · 65 阅读 · 0 评论 -
leetcode-15 三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[] 提示:0 <= nums.length <= 3000-1原创 2022-04-23 19:52:46 · 253 阅读 · 0 评论 -
leetcode-16-最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。解法:(双指针比较绝对值)...原创 2022-06-03 19:21:47 · 216 阅读 · 0 评论 -
leetcode-18-四数之和
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例 1:输入:nums = [1,0,-1原创 2022-05-19 13:20:22 · 65 阅读 · 0 评论 -
leetcode-19 删除列表的倒数第N个节点
给出一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz解法一:(快慢指针)# Defin原创 2022-04-10 10:26:38 · 493 阅读 · 0 评论 -
leetcode-34 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例 3:输入:nums = []原创 2022-05-03 10:54:27 · 119 阅读 · 0 评论 -
leetcode-35-搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 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 提示:1 <= nums.length <原创 2022-05-24 22:03:20 · 86 阅读 · 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]输出:23class Solution: def maxSubArray(self, num原创 2021-12-11 23:59:31 · 160 阅读 · 1 评论 -
leetcode-69 x的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。示例 1:输入:x = 4输出:2示例 2:输入:x = 8输出:2解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 提示:0 <= x <= 231 - 1解法一:(暴力)class Solution原创 2022-04-30 17:07:33 · 265 阅读 · 0 评论 -
leetcode 70-爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。class Solution: def climbStairs(self, n: int) -> int: if n<=0: return dp=[0,1,2,] for i in range(3,n+1): dp.append(dp[i-1]原创 2021-12-03 00:39:51 · 55 阅读 · 0 评论 -
leetcode-74 搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true示例 2:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13输出:false 提示:m ==原创 2022-05-06 21:15:46 · 62 阅读 · 0 评论 -
leetcode 83-删除排序列表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序排列class Solution: def deleteDuplicate原创 2021-12-12 20:47:16 · 63 阅读 · 0 评论 -
leetcode-94-二叉树的中序遍历
给定一个二叉树的根节点root,返回它的中序遍历示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1] 提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100解法一:(迭代-额外栈空间)# Definition for a binary tree node.# class TreeNode:#原创 2022-05-21 12:25:27 · 110 阅读 · 0 评论 -
leetcode-100-相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false提示:两棵树上的节点数目都在范围 [0, 100] 内-104 <= Node.val原创 2022-05-21 12:44:00 · 66 阅读 · 0 评论 -
leetcode-125 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串 提示:1 <= s.length <= 2 * 105字符串 s 由 ASCII原创 2022-04-23 17:49:49 · 67 阅读 · 0 评论 -
leetcode-136 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:算法应该具有线性时间复杂度。 可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解法一:(异或)class Solution: def singleNumber(self, nums: List[int]) -> int: for i in range(1, len(nums))原创 2022-04-04 11:56:57 · 210 阅读 · 0 评论 -
leetcode-139-单词拆分
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。示例 2:输入: s = "applepenapple", wordDict = ["a原创 2022-05-30 18:21:50 · 205 阅读 · 0 评论 -
leetcode 141-环形列表
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二原创 2022-04-02 11:00:25 · 47 阅读 · 0 评论 -
leetcode-144-二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2] 提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100原创 2022-05-20 21:47:29 · 91 阅读 · 0 评论 -
leetcode-167-两数之和II-输入有序数组
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。你可以假设每个输入 只对应唯一的答案 ,而且转载 2022-05-26 12:08:36 · 101 阅读 · 0 评论 -
leetcode 184-部门工资最高的员工
Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。+----+-------+--------+--------------+| Id | Name | Salary | DepartmentId |+----+-------+--------+--------------+| 1 | Joe | 70000 | 1 || 2 | Jim | 90000 | 1 || 3原创 2021-12-14 23:03:36 · 64 阅读 · 0 评论 -
leetcode-189-轮转数组
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]示例 2:输入:nums = [-1,-100,3,99], k = 2输出:[3,99,-1,-100]解释: 向右轮转 1 步: [99,-原创 2022-05-25 11:40:18 · 103 阅读 · 0 评论 -
leetcode-278 第一个错误的版本
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例 1:输入:n = 5, bad原创 2022-05-03 10:31:21 · 125 阅读 · 0 评论 -
leetocde-283-移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums = [0]输出: [0] 提示:1 <= nums.length <= 104-231 <= nums[i] <= 231 - 1解法一:(双指针直接交换)class Solution:原创 2022-05-25 21:22:07 · 2113 阅读 · 0 评论 -
leetcode-344 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = ["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:s = ["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"] 提示:1 <= s.length <= 105s[原创 2022-04-04 11:16:34 · 46 阅读 · 0 评论 -
leetcode-367 有效的完全平方数
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。进阶:不要 使用任何内置的库函数,如 sqrt 。示例 1:输入:num = 16输出:true示例 2:输入:num = 14输出:false 提示:1 <= num <= 2^31 - 1解法一:(暴力)class Solution: def isPerfectSquare(self, num: int) -> bool:原创 2022-04-30 11:15:15 · 213 阅读 · 0 评论 -
leetcode-374 猜数字大小
猜数字游戏的规则如下:每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):-1:我选出的数字比你猜的数字小 pick < num1:我选出的数字比你猜的数字大 pick > num0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num原创 2022-04-22 19:27:21 · 2070 阅读 · 0 评论 -
leetcode 383-赎金信
为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。给你一个赎金信 (ransomNote) 字符串和一个杂志(magazine)字符串,判断 ransomNote 能不能由 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。利用counter()转为字典并计数class Solution: def canConstruct(self, ransomNot原创 2021-12-05 16:06:49 · 161 阅读 · 0 评论 -
leetcode-396 旋转函数
给定一个长度为 n 的整数数组 nums 。假设 arrk 是数组 nums 顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为:F(k) = 0 * arrk[0] + 1 * arrk[1] + … + (n - 1) * arrk[n - 1]返回 F(0), F(1), …, F(n-1)中的最大值 。生成的测试用例让答案符合 32 位 整数。示例 1:输入: nums = [4,3,2,6]输出: 26解释:F(0) = (0 * 4) + (1 * 3原创 2022-04-22 19:03:16 · 245 阅读 · 0 评论 -
leetcode-398 随机索引数
给你一个可能含有 重复元素 的整数数组 nums ,请你随机输出给定的目标数字 target 的索引。你可以假设给定的数字一定存在于数组中。实现 Solution 类:Solution(int[] nums) 用数组 nums 初始化对象。int pick(int target) 从 nums 中选出一个满足 nums[i] == target 的随机索引 i 。如果存在多个有效的索引,则每个索引的返回概率应当相等。示例:输入["Solution", "pick", "pick", "pick原创 2022-04-25 17:16:48 · 249 阅读 · 0 评论 -
leetcode-441 排列硬币
你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。示例 1:输入:n = 5输出:2解释:因为第三行不完整,所以返回 2 。示例 2:输入:n = 8输出:3解释:因为第四行不完整,所以返回 3 。 提示:1 <= n <= 231 - 1解法一:(二分法)class Solution: de原创 2022-05-03 19:06:10 · 317 阅读 · 0 评论 -
leetcode-462-最少移动次数使数组元素相等II
给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最少移动数。在一步操作中,你可以使数组中的一个元素加 1 或者减 1 。示例 1:输入:nums = [1,2,3]输出:2解释:只需要两步操作(每步操作指南使一个元素加 1 或减 1):[1,2,3] => [2,2,3] => [2,2,2]示例 2:输入:nums = [1,10,2,9]输出:16 提示:n == nums.length1 <= nums.length原创 2022-05-19 13:00:27 · 176 阅读 · 0 评论 -
leetcode 541-反转字符串
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。class Solution: def reverseStr(self, s: str, k: int) -> str: l = list(s) for i in range(0,len(l),2*k):原创 2021-12-07 23:36:36 · 153 阅读 · 0 评论 -
leetcode-599 两个列表的最小索引总和
假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。示例 1:输入: list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"],list2 = ["Piatti", "The Grill at Torrey Pines", "Hungry Hu原创 2022-04-25 18:48:36 · 59 阅读 · 0 评论 -
leetcode-704 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1 提示:你可以假设 nums原创 2022-04-04 11:20:20 · 343 阅读 · 0 评论 -
leetcode 709-转换成小写数字
给一个字符串s,将该字符串中的大写字母转换成相同的小写字母,返回新的字母class Solution: def toLowerCase(self, s: str) -> str: L = [] for i in s: if 65 <= ord(i) <= 90: L.append(chr(ord(i) + 32)) else: L.ap原创 2021-12-05 17:00:46 · 51 阅读 · 0 评论 -
leetcode-744 寻找比目标字母大的最小字母
给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’示例 1:输入: letters = ["c", "f", "j"],target = "a"输出: "c"示例 2:输入: letters = ["c","f","j"], targ原创 2022-05-03 10:11:08 · 55 阅读 · 0 评论