leetcode刷题
文章平均质量分 64
leetcode刷题,记录刷题步骤
水之魂2024
这个作者很懒,什么都没留下…
展开
-
leetcode栈与队列(二)-前k个高频元素
给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按返回答案。[1,2][1]原创 2024-11-07 10:11:44 · 243 阅读 · 0 评论 -
leetcode字符串(三)-反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须、使用 O(1) 的额外空间解决这一问题。原创 2024-11-06 14:47:04 · 294 阅读 · 0 评论 -
leetcode哈希表(五)-四数相加II
给你四个整数数组nums1nums2nums3和nums4,数组长度都是n,请你计算有多少个元组2两个元组如下:1。原创 2024-11-06 11:04:54 · 251 阅读 · 0 评论 -
leetcode哈希表(四)-快乐数
编写一个算法来判断一个数n是不是快乐数。如果n是快乐数就返回true;不是,则返回false。原创 2024-11-06 10:08:07 · 352 阅读 · 0 评论 -
leetcode动态规划(二十九)-最大子数组和
给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。原创 2024-11-05 19:00:40 · 384 阅读 · 0 评论 -
leetcode动态规划(二十八)-不相交的线
在两条独立的水平线上按给定的顺序写下nums1和nums2中的整数。现在,可以绘制一些连接两个数字nums1[i]和nums2[j]请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。2可以画出两条不交叉的线,如上图所示。但无法画出第三条不相交的直线,因为从 nums1[1]=4 到 nums2[2]=4 的直线将与从 nums1[2]=2 到 nums2[1]=2 的直线相交。32。原创 2024-11-05 18:11:10 · 263 阅读 · 0 评论 -
leetcode动态规划(二十七)-最长公共子序列
给定两个字符串text1和text2,返回这两个字符串的最长的长度。如果不存在,返回0。一个字符串的是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。"ace""abcde""aec""abcde"两个字符串的是这两个字符串所共同拥有的子序列。3最长公共子序列是 "ace" ,它的长度为 3。3最长公共子序列是 "abc" ,它的长度为 3。0两个字符串没有公共子序列,返回 0。原创 2024-11-05 17:38:34 · 376 阅读 · 0 评论 -
leetcode动态规划(二十六)-最长重复子数组
题目718.最长重复子数组给两个整数数组nums1和nums2,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3,2,1] 。示例 2:输入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]输出:5思路1.确定dp数组(dp table)以及下标的含义dp[i][j]原创 2024-11-05 11:45:29 · 317 阅读 · 0 评论 -
leetcode动态规划(二十五)-最长连续递增序列
给定一个未经排序的整数数组,找到最长且,并返回该序列的长度。可以由两个下标l和rl < r)确定,如果对于每个l <= i < r,都有,那么子序列就是连续递增子序列。3最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。1最长连续递增序列是 [2], 长度为1。原创 2024-11-05 11:33:33 · 239 阅读 · 0 评论 -
leetcode字符串(二)-重复的子字符串
给定一个非空的字符串s,检查是否可以通过由它的一个子串重复多次构成。s = "abab"true可由子串 "ab" 重复两次构成。s = "aba"falsetrue可由子串 "abc" 重复四次构成。(或子串 "abcabc" 重复两次构成。原创 2024-11-05 10:12:42 · 389 阅读 · 0 评论 -
leetcode字符串(一)无重复字符最长子串
给定一个字符串s,请你找出其中不含有重复字符的的长度。3因为无重复字符的最长子串是"abc",所以其长度为 3。1因为无重复字符的最长子串是"b",所以其长度为 1。3因为无重复字符的最长子串是"wke",所以其长度为 3。请注意,你的答案必须是的长度,"pwke"是一个子序列,不是子串。原创 2024-11-05 09:37:05 · 285 阅读 · 0 评论 -
leetcode动态规划(二十四)-最长递增子序列
给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列。4最长递增子序列是 [2,3,7,101],因此长度为 4。41。原创 2024-11-04 11:48:10 · 403 阅读 · 0 评论 -
leetcode动态规划(二十三)-打家劫舍III
小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。除了root之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。如果,房屋将自动报警。给定二叉树的root。返回,小偷能够盗取的最高金额。7小偷一晚能够盗取的最高金额 3 + 3 + 1 = 79小偷一晚能够盗取的最高金额 4 + 5 = 9[1, 104]本题是将动态规划和二叉树结合在一起的题目,需要使用动态规划和二叉树的方法一起来解决。原创 2024-10-30 11:01:14 · 556 阅读 · 0 评论 -
leetcode动态规划(二十二)-打家劫舍II
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,今晚能够偷窃到的最高金额。3你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。4你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。3本题是。原创 2024-10-30 09:56:39 · 277 阅读 · 0 评论 -
leetcode动态规划(二十一)-打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。[1,2,3,1]4偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。12偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。原创 2024-10-25 16:06:29 · 239 阅读 · 0 评论 -
leetcode动态规划(二十)-单词拆分
给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。true返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。true返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。注意,你可以重复使用字典中的单词。原创 2024-10-25 10:55:55 · 715 阅读 · 0 评论 -
leetcode动态规划(十九)-完全平方数
给你一个整数n,返回和为n的完全平方数的最少数量。是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149和16都是完全平方数,而3和11不是。n =123n =13213 = 4 + 9这就是妥妥的零钱兑换的题目了动规五步曲1.确定dp含义dp[j]表示装满容量为j的背包所需要的物品最少数量是dp[j]2.确定递推公式由零钱兑换转换可以得到dp[j] = min(dp[j],dp[j-i*i]+1)3.初始化。原创 2024-10-24 16:19:07 · 210 阅读 · 0 评论 -
leetcode动态规划(十八)-零钱兑换II
给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。coins =[1, 2, 5], amount =113coins =[2], amount =3-101.确定dp数组以及下标的含义2.确定递推公式。原创 2024-10-24 11:09:51 · 517 阅读 · 0 评论 -
leetcode动态规划(十七)-组合总和IV
给你一个由整数组成的数组nums,和一个目标整数target。请你从nums中找出并返回总和为target的元素组合的个数。题目数据保证答案符合 32 位整数范围。7所有可能的组合为:(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。0从题目给的例子可以看出来每个元素可以取无数次,本题就是完全背包问题题目中:顺序不同的序列被视作不同的组合,即说明求的是排列,序列不同算不同的组合动规五步曲。原创 2024-10-24 10:34:01 · 482 阅读 · 0 评论 -
leetcode动态规划(十六)-零钱兑换
给你一个整数数组coins表示不同面额的硬币,另给一个整数amount表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回0。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。4有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+10只用面额 2 的硬币不能凑成总金额 3。1这道题是完全背包的应用,需要统计凑成目标的组合数,和之前的统计方法是一样的1.确定dp数组以及下标的含义。原创 2024-10-23 16:27:52 · 247 阅读 · 0 评论 -
leetcode动态规划(十三)-目标和
给你一个非负整数数组nums和一个整数target。向数组中的每个整数前添加'+'或'-',然后串联起所有整数,可以构造一个2'+'1'-'"+2-1"返回可以通过上述方法构造的、运算结果等于target的不同的数目。5一共有 5 种方法让最终目标和为 3。1。原创 2024-10-23 11:31:10 · 616 阅读 · 0 评论 -
leetcode动态规划(十二)-最后一块石头的重量
有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。x == yx!= yxyy-x最后,石头。返回此石头。如果没有石头剩下,就返回0。1组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],组合 2 和 1,得到 1,所以数组转化为 [1,1,1],原创 2024-10-23 10:33:05 · 371 阅读 · 0 评论 -
leetcode动态规划(十)-0-1背包理论基础(一维数组)
dp[j]表示容量为j的背包能够背的最大价值是dp[j]当j=0的时候,即背包容量为0,那就是dp[0] = 0其他的均可初始化为04.一维dp数组的遍历顺序。原创 2024-10-22 15:53:27 · 849 阅读 · 0 评论 -
leetcode动态规划(九)-0-1背包理论基础
首先从dp[i][j]的定义出发,如果背包容量j为0的话,即dp[i][0],无论是选取哪些物品,背包价值总和一定为0状态转移方程。原创 2024-10-22 10:48:39 · 677 阅读 · 0 评论 -
leetcode动态规划(八)-不同的二叉搜索树
给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的有多少种?返回满足题意的二叉搜索树的种数。n = 35n = 11题目一看很难有思路,先从1开始一步步看看少数节点时的情况当n=1的时候当n=2的时候当n=3的时候当1是头节点的时候,左子树是空的,右子树有两个节点2和3,这里2和3的布局是和n=2的时候布局是一样的当2是头节点的时候,左子树只有1这个节点,右子树只有3这个节点当3是头节点的时候,右子树是空的,左子树有1和2两个节点,这里1和2的布局是和n=2的时候布局是一样的。原创 2024-10-21 17:46:53 · 373 阅读 · 0 评论 -
leetocde动态规划(七)-整数拆分
给定一个正整数n,将其拆分为k个的和(k >= 2),并使这些整数的乘积最大化。返回你可以获得的最大乘积。n = 21n = 10361.确定dp数组(dp table)以及下标的含义dp[i]表示拆分数字i能够得到的最大的乘积2.确定递推公式其实可以从1遍历j,然后有两种渠道得到dp[i].一个是j * (i - j) 直接相乘。一个是j * dp[i - j],相当于是拆分(i - j),对这个拆分不理解的话,可以回想dp数组的定义。原创 2024-10-18 17:00:35 · 528 阅读 · 0 评论 -
leetcode动态规划(六)-不同路径(有障碍物)
给定一个m x n的整数数组grid。一个机器人初始位于(即grid[0][0]机器人尝试移动到(即机器人每次只能向下或者向右移动一步。网格中的障碍物和空位置分别用1和0来表示。机器人的移动路径中不能包含有障碍物的方格。返回机器人能够到达右下角的不同路径数量。测试用例保证答案小于等于2 * 109。23x3 网格的正中间有一个障碍物。从左上角到右下角一共有2条不同的路径:1. 向右 -> 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右 -> 向右101思路。原创 2024-10-18 15:53:28 · 353 阅读 · 0 评论 -
leetcode动态规划(四)-使用最小花费爬楼梯
给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。,20]15你将从下标为 1 的台阶开始。- 支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15。cost = [,100,,1,,100,,100,6你将从下标为 0 的台阶开始。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。原创 2024-10-18 10:32:05 · 303 阅读 · 0 评论 -
leetcode动态规划(二)-斐波那契数列
(通常用F(n)表示)形成的序列称为。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定n,请计算F(n)。n = 21n = 32n = 43第i个斐波那契数列的值为dp[i]2.确定递推公式递推公式题目中已经给出dp[i] = dp[i-1]+dp[i-2]3.初始化dp题目中已经给了dp[0] = 0dp[1] = 14.确定遍历数序。原创 2024-10-17 10:41:38 · 524 阅读 · 0 评论 -
leetcode动态规划(三)-爬楼梯
假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶n = 33有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶1.确定dp数组(dp table)以及下标的含义:表示爬到第i层楼梯一共有dp[i]种方法2.确定递推公式3.dp数组如何初始化题目中也已经给了dp[1] = 1,dp[2] = 2。原创 2024-10-17 11:08:32 · 247 阅读 · 0 评论 -
leetcode动态规划(一)-理论基础
动态规划都需要递推公式,而递推公式的定义又很容易搞混或者不清不楚的就过去了,提交代码运行通过就不会去关心这个是怎么定义的,要是不通过就改改改,很少回去思考这个递推公式真正的含义是什么,所以动态规划可以制定五步曲,每一步按照这个来做,思路会清晰很多,当遇到问题或者想不明白的时候,就回忆一下递推公式的含义是什么。动态规划中dp[j]是由dp[j-weight[i]]推导出来的,然后取max(dp[j], dp[j - weight[i]] + value[i])。,贪心没有状态推导,而是从局部直接选最优的。原创 2024-10-17 10:19:36 · 416 阅读 · 0 评论 -
leetcode二叉树(八)-二叉树的最大深度
是指从根节点到最远叶子节点的最长路径上的节点数。原创 2024-10-15 09:45:34 · 414 阅读 · 0 评论 -
leetcode二叉树(七)-对称二叉树
给你一个二叉树的根节点root, 检查它是否轴对称。truefalse[1, 1000]思路对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,理解这一点就知道了,所以在递归遍历的过程中,也是要同时遍历两棵树。那么如何比较呢?比较的是两个子树的里侧和外侧的元素是否相等。本题遍历只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。但都可以理解算是后序遍历,尽管已经不是严格上在一个树上进行遍历的后序遍历了。原创 2024-10-15 09:25:49 · 234 阅读 · 0 评论 -
leetocode二叉树(六)-翻转二叉树
给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。[2,3,1]root = [][][0, 100]遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。原创 2024-10-14 17:30:32 · 391 阅读 · 0 评论 -
leetcode哈希表(三)-两数之和
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出target的那整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。[0,1]因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。[1,2][0,1]原创 2024-10-14 16:47:35 · 347 阅读 · 0 评论 -
leetcode栈与队列(一)-有效的括号
给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。原创 2024-10-14 10:17:25 · 523 阅读 · 0 评论 -
leetcode二叉树(二)-二叉树的递归遍历
给你二叉树的根节点root,返回它节点值的遍历。原创 2024-10-13 12:10:17 · 291 阅读 · 0 评论 -
leetcode二叉树(一)-理论基础
本节主要参考代码随想录:代码随想录满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(h从1开始),则该层包含 1~ 2^(h-1) 个节点。注:第三个不是完全二叉树,不满足最后一个条件: 最下面一层的节点都集中在该层最左原创 2024-10-13 11:52:26 · 815 阅读 · 0 评论 -
leetcode哈希表(二)-两个数组的交集
给定两个数组nums1和nums2,返回它们的交集。输出结果中的每个元素一定是的。我们可以。[2][9,4][4,9] 也是可通过的新建一个list用来存储交集nums,遍历其中的一个list,去查看每个元素是不是在另一个list中,要是存在就添加到nums中,要是不存在就不添加,需注意的是这个时候需要判断下改元素是否已经在nums中了。原创 2024-10-13 10:33:04 · 391 阅读 · 0 评论 -
leetcode链表(三)-反转链表
给你单链表的头节点head,请你反转链表,并返回反转后的链表。原创 2024-10-11 19:54:20 · 328 阅读 · 0 评论