- 博客(908)
- 资源 (22)
- 收藏
- 关注
原创 LeetCode解法汇总518. 零钱兑换 II
所以,我们需要换一种思路,首先求仅使用1求[1,5]范围内每个位置有多少种可能,然后使用1,2求[2,5]范围内每个位置有多少种可能,最后使用[1,2,5]求[5,5]范围内有多少种可能。正常来说,我们会先求1,在求2,3。但是这样会有一个问题,以amout=5,coins=[1,2,5]为例。当i=3时,3=1+2和3=2+1,这两个很明显重复了,导致重复计算。使用动态规划,amoutDp[i]代表到总额为i时所有的组合可能。只用面额 2 的硬币不能凑成总金额 3。表示不同面额的硬币,另给一个整数。
2024-03-27 21:00:00 305
原创 LeetCode解法汇总2671. 频率跟踪器
add时,首先找到number对应的model,然后次数+1,同时,从frequencyMap的set中找到这个model并删掉。// 返回 true ,因为 3 出现 2 次。// 返回 true ,因为 3 出现 1 次。// 返回 false ,因为数据结构为空。第二个frequencyMap,key为出现的次数,value为set记录,代表出现key次的所有model。// 数据结构现在包含 [3, 3]然后,构建两个map,第一个numMap,记录出现的数字以及其所对应的model。
2024-03-22 21:00:00 1025
原创 LeetCode解法汇总1969. 数组元素的最小非零乘积
首先,我们了解一个概念,两个数之和不变时,大的数越大,小的数越小,则乘积就越小。以p=3为例,有7个数:[1,2,3,4,5,6,7],1和7无法加减,则让2和5结合,2和4结合。得到[1,1,1,6,6,6,7]。总结规律:有2^(p-1)-1个1 以及 2^(p-1)-1个2^p-2,以及1个2^p-1。数组乘积 1 * 6 * 1 * 6 * 1 * 6 * 7 = 1512 是最小乘积。1可以忽略,则最终就是 2^(p-1)-1个2^p-2和1个2^p-1的乘积。只有一个元素,所以乘积为该元素。
2024-03-20 23:00:00 380
原创 LeetCode解法汇总2864. 最大二进制奇数
其中一个 '1' 必须出现在最后一位上。而由剩下的数字可以生产的最大数字是 "100"。所以答案是 "1001"。因为字符串 s 中仅有一个 '1' ,其必须出现在最后一位上。所以答案是 "001"。以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。字符串中的位,使得到的二进制数字是可以由该组合生成的。统计1的数量,其中1个放在最后面,其余的放在最前面即可。
2024-03-13 20:23:43 261 1
原创 LeetCode解法汇总1261. 在受污染的二叉树中查找元素
一个数字正向的计算,就是不断的乘以2,然后+1或者+2。那么逆向去推,我们可以判断target%2是否等于0,如果等于0处于右节点,不等于0则位于左节点。比如target=8,8%2=0,则记录2,然后(8-2)/2生成其父节点3,指向target。target=3,3%2=1,则记录1,然后(3-1)/2生成其父节点1,指向target。通过栈生成查找链[1,1,2]。1代表左,2代表右,查找对应节点是否存在即可。target=1,1%2=1,则记录1,指向根节点。现在这个二叉树受到「污染」,所有的。
2024-03-12 21:00:00 581
原创 LeetCode解法汇总2129. 将标题首字母大写
它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母。请你按以下规则将每个单词的首字母。由于所有单词的长度都至少为 3 ,将每个单词首字母大写,剩余字母变为小写。其他单词长度都至少为 3 ,所以其他单词首字母大写,剩余字母小写。其他单词长度都至少为 3 ,所以其他单词首字母大写,剩余字母小写。比较简单,先分割成单词,然后逐个单词转换,最后拼接回字符串。单词 "of" 长度为 2 ,所以它保持完全小写。单词 "i" 长度为 1 ,所以它保留小写。
2024-03-11 21:00:00 280
原创 LeetCode解法汇总2834. 找出美丽数组的最小和
所以1,2,3,的数组中,如果选择了1就不能选择5,同理4也不能选。所以第一段范围是[1,1 + leftLength - 1],第二段范围是[target,target + n - leftLength - 1],leftLength=target/2。- 不存在两个不同下标 i 和 j ,使得 nums[i] + nums[j] == 3。- 不存在两个不同下标 i 和 j ,使得 nums[i] + nums[j] == 3。第一种,target>=2*n,这种场景下,最小和就是1到n的累加和。
2024-03-08 21:00:00 462
原创 LeetCode解法汇总232. 用栈实现队列
元素移除的时候,检查出栈是否为空,如果为空,则把入栈依次移除添加到出栈中即可。请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(实用两个栈来实现,一个入栈,一个出栈。元素添加的时候,只加入入栈即可。栈的两次倒序,也就变成了正序。
2024-03-04 21:00:00 453
原创 LeetCode解法汇总2476. 二叉搜索树最近节点查询
如果节点值大于目标值,则递归搜索其左子树,因为只有左子树的值才会比目标值小,最合适的值仍然为上一次的,因为这一次的不满足。如果节点值小于目标值,则递归搜索其左子树,因为只有右子树的值才会比目标值大,最合适的值调整为当前值,因为本地的值符合匹配。寻找小于等于target的数中最大的数值,属于典型的二叉树搜索,构建一个方法searchValue进行二叉树递归遍历。这道题,其实可以分成寻找小于等于target的数中最大的,以及大于等于target的数中最小的。寻找大于等于target的数中最小的方法也是一样。
2024-02-29 22:15:00 1638
原创 LeetCode解法汇总2673. 使二叉树所有路径值相等的最小代价
比如题目中的[1,5,2,2,3,3,1]中,最后一层的节点位置是[2^2-1,2^3-1]的范围,比较3,4位置用较大值减去较小值,差值添加到abs中。然后把较大值加到父节点上,比如3,4位置的父节点就是3/2=1。最后,我们可以构建这样的循环,首先遍历最后一层级节点,保证相邻的两个节点值相等,不相等则填平,然后把填平后的值加到其父节点上,构建父节点的权限。其次某个节点找到其父节点,只要把相邻两个节点靠前的那个节点i除以2即可得到其父节点位置。两条路径已经有相等的路径值,所以不需要执行任何增加操作。
2024-02-28 21:00:00 662
原创 LeetCode解法汇总235. 二叉搜索树的最近公共祖先
我的思路是构建一个递归方法,传入值为当前遍历的节点node,搜索的节点searchNode,以及根结点到搜索节点的集合list,返回值为当前节点及其子节点是否包含搜索节点。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(因为都从根节点开始的,所以如果拥有相同的最近祖先,则其在list中的位置一定是一样的。1.当前节点就是搜索的节点,则把当前节点加入到集合中,并返回true。3.右子节点也是相同的操作。
2024-02-27 21:00:00 368
原创 LeetCode解法汇总938. 二叉搜索树的范围和
这里有一个节省时间的办法,如果某个节点值>high,则右子节点就不需要搜索了。进行二叉树搜索遍历,如果值在范围内,则累加到sum上。,返回值位于范围 [low, high]之间的所有结点的值的和。给定二叉搜索树的根结点。
2024-02-26 17:20:33 292
原创 LeetCode解法汇总122. 买卖股票的最佳时机 II
第i天持有股票的最大收益dpHold[i]来源只有两种可能,i-1天未持有股票买入股票,或者i-1天持有股票未卖出,求这两者较大值就是第i天的收益最大值。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。设置两个数组分别记录每天持有股票时最大收益和每天未持有股票时最大收益。
2024-02-24 07:00:00 257
原创 LeetCode解法汇总2583. 二叉树中的第 K 大层和
使用searchTreeNode方法进行深度搜索,传入参数为当前节点以及所在层级。,如果两个节点与根节点的距离相同,则认为它们在同一层。最后对层级数组进行排序,倒序取第k位即可。大的层和(不一定不同)。构建一个数组,存放每个层级的值之和。第 2 大的层和等于 13。给你一棵二叉树的根节点。最大的层和是 3。
2024-02-23 21:00:00 464
原创 LeetCode解法汇总889. 根据前序和后序遍历构造二叉树
前序遍历中,第一个是根结点A,第二个则是子树的根结点B。这时候分两种场景,如果存在左子树,则可以根据B在后序遍历中的位置进行分割成两部分。找到子树B也就是2在postorder中的位置,就可以分成两部分,第一部分在preorder中是[2,4,5],在postorder中是[4,5,2]。第二部分在preorder中是[3,6,7],在postorder中是[6,7,3]。这题和105,106题差不多,仍然是不断构建前序和后序匹配的区间进行生成。是同一棵树的后序遍历,重构并返回二叉树。
2024-02-22 21:00:00 360
原创 LeetCode解法汇总106. 从中序与后序遍历序列构造二叉树
1.和105题差不多,只不过后序遍历的最后一个数字,一定是根节点。中序遍历中找到这个根节点,就可以分成左右两份,分别对应左子树和右子树。2.所以我们使用和105题一样的策略,唯一要改的就是传入的区间范围。是同一棵树的后序遍历,请你构造并返回这颗。是二叉树的中序遍历,
2024-02-21 21:00:00 461
原创 LeetCode解法汇总105. 从前序与中序遍历序列构造二叉树
2.比如前序遍历是[1,2,3,4],中序遍历是[3,2,1,4],那么1就是根节点,[3,2]就位于根节点的左子树上,[4]位于根节点的右子树上。此时我们就可以构建一个1的节点。3.我们继续对[4]的部分继续采取上面的分割流程,就可以生成一个4的节点,此时无法继续分割。继续对[2,3]的部分进行分割,则可以生成一个2的节点,然后继续分割。4.所以,我们可以采取递归的策略,不断的分割,每次分割取出其前序和中序遍历的部分进行下一轮的遍历,直到长度为1,并添加到其左右节点上。,请构造二叉树并返回其根节点。
2024-02-20 17:28:22 466
原创 LeetCode解法汇总292. Nim 游戏
dp[1],dp[2],dp[3]都是true,d[4]为false,5,6,7为true,8为false。这题本来是一道动态规划的题目,以先下的为准,dp[i]代表第i位先下的人赢或者输。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为。1. 移除1颗石头。你的朋友移走了3块石头,包括最后一块。你的朋友移走2块石头,包括最后一块。3.你移走3颗石子。你的朋友移走了最后一块石头。跟明显,%4==0的位置,先下的会输。在所有结果中,你的朋友是赢家。你和你的朋友,两个人一起玩。
2024-02-04 13:09:43 474
原创 LeetCode解法汇总1686. 石子游戏 VI
比方说,Alice 拿石子 1 ,Bob 拿石子 2 , Alice 拿石子 0 ,Alice 会得到 6 分而 Bob 得分为 7 分。所以,总结下来,就可以自己的权重+对方的权重之和作为总权重,然后排序,排在前面的就是最应该被提前选择的。如果 Alice 拿石子 1 (下标从 0开始),那么 Alice 可以得到 3 分。不管 Alice 怎么操作,Bob 都可以得到比 Alice 更高的得分。Alice 拿石子 0 , Bob 拿石子 1 ,他们得分都为 1 分。个石子,轮到某个玩家时,他可以。
2024-02-02 14:53:01 445
原创 LeetCode解法汇总2670. 找出不同元素数目差数组
对于 i = 1,前缀中有 2 个不同的元素,而在后缀中有 3 个不同的元素。对于 i = 0,前缀中有 1 个不同的元素,而在后缀中有 3 个不同的元素。对于 i = 1,前缀中有 2 个不同的元素,而在后缀中有 3 个不同的元素。对于 i = 2,前缀中有 3 个不同的元素,而在后缀中有 2 个不同的元素。对于 i = 2,前缀中有 2 个不同的元素,而在后缀中有 2 个不同的元素。对于 i = 3,前缀中有 3 个不同的元素,而在后缀中有 1 个不同的元素。两个Map的数量之差,就是我们想要的答案。
2024-02-01 21:00:00 397
原创 LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
第 1 秒,将每个位置的元素分别变为 [nums[0],nums[2],nums[2],nums[2],nums[3]]。变化后,nums = [2,3,3,3,3]。- 第 2 秒,将每个位置的元素分别变为 [nums[1],nums[1],nums[2],nums[3],nums[4]]。变化后,nums = [3,3,3,3,3]。- 第 1 秒,将每个位置的元素分别变为 [nums[3],nums[1],nums[3],nums[3]]。变化后,nums = [2,2,2,2]。
2024-01-30 15:36:34 506
原创 LeetCode解法汇总365. 水壶问题
确定是否有可能使用这两个壶准确得到。所以我们可以推演出6中新的场景,然后继续去搜索这6种场景。为了避免场景的重复,我们设置一个set记录重复场景即可。升水,最后请用以上水壶中的一或两个来盛放取得的。本题适合深度优先搜索的思路去解决。桶1倒入桶2或者桶2倒入桶1;有两个水壶,容量分别为。
2024-01-30 14:46:46 527 2
原创 LeetCode解法汇总2859. 计算 K 置位下标对应元素的和
因此,答案为 nums[1] + nums[2] + nums[4] = 13。然后判断个数,如果countOnes个数符合预期,则添加到sum中。下标 1、2 和 4 在其二进制表示中都存在 k = 1 个置位。定义方法countOnes,代表num中以二进制表示时1的个数。,这些特定元素满足:其对应下标的二进制表示中恰存在。只有下标 3 的二进制表示中存在 k = 2 个置位。整数的二进制表示中的 1 就是这个整数的。因此,答案为 nums[3] = 1。
2024-01-26 18:28:02 482
原创 LeetCode解法汇总2865. 美丽塔 I
dpLeft[i]代表i的左侧从左向右单调非递减,并且使0到i位置之和最大的值。dpRight[i]代表i的右侧从左向右单调非递增,并且使i到n-1位置之和最大的值。某个位置i的大高度dp[i] = dpLeft[i] + dpRight[i] - maxHeights.get(i);求dpRight[i]的时候,我们从右向左遍历,构造单调递减的栈。如果i位置的值小于栈顶,则我们出栈,直到栈为空。- heights 是个山脉数组,峰值在 i = 3 处。注意,在这个方案中,i = 3 也是一个峰值。
2024-01-24 20:10:06 1061
原创 LeetCode解法汇总2182. 构造限制重复的字符串
注意,尽管 "zzcccca" 字典序更大,但字母 'c' 连续出现超过 3 次,所以它不是一个有效的 repeatLimitedString。注意,尽管 "bbabaaa" 字典序更大,但字母 'a' 连续出现超过 2 次,所以它不是一个有效的 repeatLimitedString。因此,没有字母连续出现超过 repeatLimit 次,字符串是一个有效的 repeatLimitedString。该字符串是字典序最大的 repeatLimitedString ,所以返回 "bbabaa"。
2024-01-20 17:29:07 1008
原创 LeetCode解法汇总2171. 拿出最少数目的魔法豆
总共拿出了 1 + 2 + 1 = 4 个魔法豆,剩下非空袋子中魔法豆的数目相等。总共拿出了 2 + 2 + 3 = 7 个魔法豆,剩下非空袋子中魔法豆的数目相等。- 然后我们从另一个有 2 个魔法豆的袋子中拿出 2 个魔法豆。- 我们从有 2 个魔法豆的其中一个袋子中拿出 2 个魔法豆。- 然后我们从有 6 个魔法豆的袋子中拿出 2 个魔法豆。- 然后我们从有 5 个魔法豆的袋子中拿出 1 个魔法豆。- 然后我们从有 3 个魔法豆的袋子中拿出 3 个魔法豆。剩下袋子中魔法豆的数目为:[4,0,4,
2024-01-18 21:02:55 464
原创 LeetCode解法汇总83. 删除排序链表中的重复元素
如果set中无该值,则需要判断头节点是否为空,为空则设置为头节点,否则插入到尾节点的后面。如果set中有该值,则无需处理,说明重复。删除所有重复的元素,使每个元素只出现一次。使用set存储所有遍历过的节点,给定一个已排序的链表的头。
2024-01-16 14:14:52 440
原创 LeetCode解法汇总82. 删除排序链表中的重复元素 II
如果不等于,则说明读到了一个新的节点,需要判断是否是重复的节点。num>1代表重复,也跳过。如果num=1,则需要把节点插入到筛选后的链表中。设置三个指针,分别代表头节点,筛选后链表的最后一个节点,以及未筛选链表的上一个节点。删除原始链表中所有重复数字的节点,只留下不同的数字。遍历链表,如果为空,则记录为链表的上一个节点。如果不为空,则判断值是否等于上一个节点。给定一个已排序的链表的头。如果等于,则num+1。
2024-01-15 19:13:37 498
原创 编程竞赛-消息存取
如果 opt = out\mathit {opt}\ =\ \mathit{out}opt = out,则接着输入一个非负整数 p(0 ≤ p ≤ 100)\mathit p(\text 0\ \leq\ \mathit p\ \leq\ \text {100})p(0 ≤ p ≤ 100);第十二个操作,尝试取类型为 3\text 33 的第一条消息,此时队列中并没有此类消息,输出 −1-\text 1−1。一开始队列中没有消息,因此,最先的两条取消息操作均输出 −1-\text 1−1。
2024-01-13 07:00:00 776
原创 LeetCode解法汇总2707. 字符串中的额外字符
将 s 分成两个子字符串:下标从 3 到 7 的 "hello" 和下标从 8 到 12 的 "world"。下标为 0 ,1 和 2 的字符没有使用,所以我们返回 3。将 s 分成两个子字符串:下标从 0 到 3 的 "leet" 和下标从 5 到 8 的 "code"。那么dp[i]有两种来源,或者dp[i-1]+1,或者从某个位置跳跃而来。那么dp[3](位置d)要么dp[2]+1,要么dp[1](b的位置)直接拼接cd而来。使用dp[i]代表到i位置时,使剩下的字符最少的数量。
2024-01-12 07:00:00 395
原创 LeetCode解法汇总2645. 构造有效字符串的最少插入数
设置index记录位置,取index位置的前3位,如果等于abc,则index+3,不需要插入字母;取index位置的前2位,如果等于ab,bc,ab,则需要插入一个1个字母,index+2;在 "b" 之前插入 "a" ,在 "b" 之后插入 "c" 可以得到有效字符串 ",你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次,返回使。在每个 "a" 之后依次插入 "b" 和 "c" 可以得到有效字符串 "a。如果字符串可以由 "abc" 串联多次得到,则认为该字符串。需要插入的最少字母数。
2024-01-11 17:21:12 504
原创 LeetCode解法汇总2696. 删除子串后的字符串最小长度
这时,就需要从前向后寻找AB或者CD,删除后,检查删除位置的前后是否构成新的AB或者CD,如果是则继续删除,而不是每次都从头查询。这题还是比较简单的,因为s的长度为100以内,所以可以直接按照题目的描述去实现。FCACDB" 中删除子串 "AB",得到 s = "FCACDB"。B" 中删除子串 "CD",得到 s = "FCAB"。你可以对此字符串执行一些操作,在每一步操作中,你可以从。" 中删除子串 "AB",得到 s = "FC"。,删除子串后,重新连接出的字符串可能会产生新的。
2024-01-10 17:42:09 464
原创 LeetCode解法汇总2487. 从链表中移除节点
遍历head中的节点,如果当前节点的值大于栈顶,则把栈顶移除,直至栈为空。然后把当前节点加入单调栈。构造一个单调栈monotonicStack,这个栈存放单调非递增的节点。最后,利用单调栈反向生成链表,就是我们想要的结果。每个节点的值都是 1 ,所以没有需要移除的节点。需要移除的节点是 5 ,2 和 3。移除每个右侧有一个更大数值的节点。- 节点 13 在节点 5 右侧。- 节点 13 在节点 2 右侧。- 节点 8 在节点 3 右侧。给你一个链表的头节点。返回修改后链表的头节点。
2024-01-03 19:04:38 415
原创 LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
制作 1 个巨无霸汉堡和 6 个小皇堡需要 4*1 + 2*6 = 16 片番茄和 1 + 6 = 7 片奶酪。* 则N=cheeseSlices-M => 4M+2*(cheeseSlices-M) = tomatoSlices。为了避免浪费原料,请你帮他们制定合适的制作计划。制作 1 个巨无霸汉堡会剩下 16 片奶酪,制作 2 个小皇堡会剩下 15 片奶酪。([巨无霸汉堡总数,小皇堡总数])的格式返回恰当的制作方案,使得剩下的番茄片。,分别表示番茄片和奶酪片的数目。* 设巨无霸汉堡M个,小皇堡有N个。
2024-01-02 15:15:19 951
原创 LeetCode解法汇总2706. 购买两块巧克力
请你返回在购买两块巧克力后,最多能剩下多少钱。如果购买任意两块巧克力都超过了你拥有的钱,请你返回。分别购买价格为 1 和 2 的巧克力。你剩下 3 - 3 = 0 块钱。所以我们返回 0。购买任意 2 块巧克力都会超过你拥有的钱数,所以我们返回 3。,它表示一个商店里若干巧克力的价格。同时你想最小化购买两块巧克力的总花费。两块巧克力,而且剩余的钱数必须是。注意剩余钱数必须是非负数。,表示你一开始拥有的钱数。
2023-12-29 16:43:35 448
原创 LeetCode解法汇总2866. 美丽塔 II
所以构造一个从左向右不递减的集合,比如[5,2,3,6],则对应的应该是[2,2,3,6],求和之后就是[2,4,7,13]同样构造一个从右向左不递减的集合,比如[5,2,3,6],则对应的应该是[2,2,2,2],求和之后就是[8,6,4,2]我们计算出两个集合每个位置的sum之和,比如第1位,则其sum为4+6-2。- heights 是个山脉数组,最大值在 i = 2 处。- heights 是个山脉数组,峰值在 i = 3 处。注意,在这个方案中,i = 3 也是一个峰值。你的任务是在坐标轴上建。
2023-12-21 18:01:38 159
原创 LeetCode解法汇总746. 使用最小花费爬楼梯
一旦你支付此费用,即可选择向上爬一个或者两个台阶。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。- 支付 15 ,向上爬两个台阶,到达楼梯顶部。- 支付 1 ,向上爬一个台阶,到达楼梯顶部。你将从下标为 1 的台阶开始。你将从下标为 0 的台阶开始。
2023-12-18 16:52:53 101
poi-bin-5.1.0.zip(只要2积分)
2021-11-18
freeline_gradle.zip
2016-09-01
android瀑布流容器
2016-05-04
adb资源文件
2014-12-17
潜艇作战项目
2013-09-27
android桌面悬浮宠物框
2013-08-21
log4j的jar包
2013-08-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人