自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 2025-4-2 蓝桥杯刷题情况(分布式队列)

主/副节点中都各自维护着一个队列,当往分布式队列中添加元素时都是由主节点完成的(每次都会添加元素到主节点对应的队列的尾部);可以认为主/副节点中的队列是一个长度无限的一维数组,下标为 0,1,2,3...,同时副节点中的元素的同步顺序和主节点中的元素添加顺序保持一致。简单来说,分布式队列包含 N 个节点(编号为0至N-1,其中0号为主节点),其中只有一个主节点,其余为副节点。由于副本的同步速度各异,因此为了保障数据的一致性,元素添加到主节点后,需要同步到所有的副节点后,才具有可见性。

2025-04-02 15:03:06 365

原创 2025-3-30 蓝桥杯刷题情况

地产大亨 Q 先生临终的遗愿是:拿出 100100 万元给 X 社区的居民抽奖,以稍慰藉心中愧疚。麻烦的是,他有个很奇怪的要求:100100 万元必须被正好分成若干份(不能剩余)。每份必须是 77 的若干次方元。比如:11 元, 77 元, 4949 元,343343 元,...相同金额的份数不能超过 55 份。在满足上述要求的情况下,分成的份数越多越好!请你帮忙计算一下,最多可以分为多少份?

2025-03-30 23:13:42 289

原创 2025-3-27 leetcode刷题情况(动态规划——完全背包)

给你一个整数数组 coins ,表示不同面额的硬币;完全平方数 是一个整数,其值等于另一个整数的平方;例如,1、4、9和 16 都是完全平方数,而 3 和 11 不是。为 0,表示和为 0 时无需完全平方数。,这是因为本题是完全背包问题,每个硬币可以使用多次。的完全平方数作为 “物品”,内层从当前完全平方数开始遍历到。是否为初始最大值,若不是,则说明可以通过使用当前硬币。给你一个整数 n,返回 和为n的完全平方数的最少数量。,即凑出目标金额所需的最少硬币数量。所需的最少硬币数量,同时将。

2025-03-27 16:24:42 392

原创 2025-3-26 leetcode刷题情况(动态规划——完全背包)

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target。请你从 nums 中找出并返回总和为 target 的元素组合的个数。初始化为 1,代表组成 0 的组合只有一种(即不选取任何数字)。给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。初始化为 1,表示凑出金额为 0 有一种方式(即不使用任何硬币)。如果任何硬币组合都无法凑出总金额,返回0。,对于每一种硬币,再从该硬币面额开始遍历到目标金额。的不同组合的数量,并将。首先,创建一个长度为。

2025-03-27 15:51:48 279

原创 2025-3-25 leetcode刷题情况(动态规划——01背包)

初始化为 1,表示不选任何元素时和为 0 有一种方法。随后利用两层循环进行动态规划,外层遍历数组元素,内层从。之和为奇数,说明无法达成目标,直接返回 0。接着计算出等价的背包容量。,对于每个字符串,统计其中 0 和 1 的数量。个 1 时能选取的最大字符串数量。到该字符串 1 的数量进行逆向遍历,更新。表示选取当前字符串后的最大数量。逆向遍历到当前元素值,更新。即为满足目标值的方法数量。到该字符串 0 的数量、首先计算数组元素总和。

2025-03-25 10:53:54 164

原创 2025-3-24 leetcode刷题情况(动态规划——01背包)

请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。接着计算数组元素总和,若总和为奇数,由于无法将其平分为两个相等和的子集,所以直接返回。,用于记录能否组成和为不同值的情况。之后遍历数组中的每个元素,对于每个元素,从。中的较大值,这是在考虑是否把当前石头纳入组合以得到更接近。中的较大值,这是在考虑是否将当前元素纳入子集以组成和为。,若相等则说明可以将数组分割成两个和相等的子集,返回。,两者相减就得到最后剩余石头的最小重量。开始逆向遍历到当前石头的重量,更新。的重量和,另一堆重量为。

2025-03-24 21:25:22 365

原创 2025-3-23 leetcode刷题情况(动态规划)

给你一个整数 n,求恰由 n个节点组成且节点值从 1 到 n互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。给定一个正整数n,将其拆分为k个正整数 的和(k>=2),并使这些整数的乘积最大化。为 1,分别代表空树和单节点树的情况。用于存储每个正整数拆分后的最大乘积,初始化。接着从 3 开始遍历到。,考虑两种拆分情况:一是直接将。取这两种情况的最大值,并更新。为根的不同二叉搜索树数量是。的乘积,将这些乘积累加更新。返回 你可以获得的最大乘积。个节点,根据乘法原理,以。

2025-03-24 20:39:03 308

原创 2025-3-18 leetcode刷题情况(动态规划)

dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。推导公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]。dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条。dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。

2025-03-18 09:40:07 392

原创 2025-3-17 leetcode刷题情况(动态规划)

动规五部曲:这里我们要用一个一维dp数组来保存递归的结果确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组。

2025-03-17 11:10:47 299

原创 2025-3-14 leetcode刷题情况(贪心算法)

小于等于 0,说明当前连续子数组的和为负数或 0,继续往后累加这个子数组不会得到更大的和,因此将。先特殊处理数组只有一个数的情况,再定义两个变量,sum用于记录最大子数组和,重置为 0,重新开始计算新的连续子数组和。中存储的就是最大子数组和,将其返回。用于记录当前连续子数组的和。始终记录最大子数组和。的大小,将较大值更新到。

2025-03-14 16:00:52 918

原创 2025-3-13 leetcode刷题情况(贪心算法--区间问题)

先排序,让所有的相邻区间尽可能的重叠在一起。

2025-03-13 10:58:01 559

原创 2025-3-12 leetcode刷题情况(贪心算法--区间问题)

如果当前气球和前一个气球重叠,更新当前气球的结束坐标为当前气球和前一个气球结束坐标的最小值,即。若当前区间与前一个区间不重叠,说明找到了一个新的不重叠区间,将。此时,将当前区间的结束位置更新为当前区间和前一个区间结束位置的最小值,即。,说明这两个气球不重叠,需要额外一支箭来引爆当前气球,因此。这样做是为了保证后续判断时,能正确处理重叠气球的范围。初始化为 1,因为至少需要一支箭来开始引爆气球。作为比较器,确保区间按起始位置从小到大排列。,得到需要移除的最少区间数量并返回。数组按照区间的起始位置进行排序。

2025-03-12 15:17:39 594

原创 2025-3-11 leetcode刷题情况(贪心算法--区间问题)

并初始化为 0,表示当前能够到达的最远位置。从数组的第一个位置开始遍历,只要当前位置。在每次更新覆盖范围后,检查覆盖范围是否已经能够到达数组的最后一个位置(即。在遍历过程中,不断更新覆盖范围,取当前覆盖范围。如果遍历结束后都没有到达终点,说明无法到达,返回。如果数组长度为 1,说明已经在终点,直接返回。时,意味着当前跳跃范围已遍历完,此时将。,表示到达了下一个能覆盖的最远位置,同时。为 0,代表下一步覆盖的最远距离下标。为 0,代表当前覆盖的最远距离下标;出发能到达的最远位置。),如果可以,则返回。

2025-03-11 09:24:12 433

原创 2025-3-10 leetcode刷题情况(贪心算法--中等题目)

这里用到贪心算法,先定义一个result为0,然后通过for循环遍历prices里面的数据,通过用当前值减去前一个值和0进行比较 看是否能赚钱,将正数的结果不断相加最后等于result,遍历完成以后就可以返回result。:从数组的倒数第二个元素开始向左遍历,若当前孩子的评分比右边孩子高,则取当前孩子原本的糖果数和右边孩子糖果数加 1 中的最大值作为当前孩子新的糖果数。:从数组的第二个元素开始,若当前孩子的评分比前一个孩子高,则当前孩子的糖果数为前一个孩子的糖果数加 1;否则,当前孩子的糖果数为 1。

2025-03-10 15:56:19 242

原创 2025-3-9 leetcode刷题情况(贪心算法--序列问题)

首先判断给的数组的长度,如果小于等于1就返回数组的长度。定义三个变量,一个为当前的差值,一个为前一个的差值,一个存储最长子序列的长度。然后遍历数组进行循环判断,当前差值等于当前数减前一个数,如果当前差和前一个差分别为正负数,则count加1,再将当前差赋值给前一个差,如此循环,等遍历结束,返回count。从数组倒数第二位开始向前遍历,若发现当前位数字大于后一位数字,就把当前位数字减 1,并记录下从下一位开始后续数字需置为 9 的起始位置;给定一个整数 n,返回小于或等于 n的最大数字,且数字呈单调递增。

2025-03-09 17:24:01 388

原创 2025-3-5 leetcode刷题情况(贪心算法--简单题目)

使用贪心算法主要就是考虑局部最优是什么,如果推导出全局最优。

2025-03-05 09:49:50 600

原创 2025-3-4 leetcode刷题情况(回溯算法--51.N皇后)

转换为一个字符串列表,每个字符串表示棋盘的一行。

2025-03-05 08:41:00 328

原创 2025-3-3 leetcode刷题情况(回溯算法--排列)

给定一个不含重复数字的数组 nums ,返回其所有可能的全排列。你可以按任意顺序返回答案。给定一个可包含重复数字的序列 nums ,按任意顺序返回所有不重复的全排列。

2025-03-03 17:06:38 164

原创 2025-3-2 leetcode刷题情况(回溯算法--分割)

给你一个字符串 s,请你将 :分割成一些子串,使每个子串都是 回文串。返回 s所有可能的分割方案。首先构建列表,一个二维列表存储满足所有条件的分割方案,一个一维列表存储当前的分割方案。为 0,表示从字符串的第一个字符开始尝试分割,同时传入一个空的。方法开始回溯搜索,初始的起始位置。方法是对外的接口,主要调用下面的。

2025-03-02 16:59:15 300

原创 2025-2-28 leetcode刷题情况(回溯算法--组合)

递归函数的返回值以及参数回溯函数终止条件单层搜索的过程。

2025-02-28 19:00:54 939

原创 2025-2-25 leetcode刷题情况(二叉树公共祖先问题)

修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在唯一的答案,所以结果应当返回修剪好的二又搜索树的新的根节点。给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value,将值插入二又搜索树。给定一个二叉搜索树的根节点 root 和一个值 key,删除二又搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二又搜索树(有可能被更新)的根节点的引用。这题是二叉搜索树,它是有方向的,根据插入元素的数值,决定递归方向。

2025-02-25 09:43:02 565

原创 2025-2-24 leetcode刷题情况(二叉树公共祖先问题)

百度百科中最近公共祖先的定义为:“对于有根树T的两个结点 p、q,最近公共祖先表示为一个结点x,满足x是 p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点 p、q,最近公共祖先表示为一个节点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。二叉搜索树具有这样的特性:对于树中的任意节点,其左子树中所有节点的值都小于该节点的值,而其右子树中所有节点的值都大于该节点的值。的最近公共祖先,直接返回当前节点。

2025-02-24 13:32:38 221

原创 2025-2-23 leetcode刷题情况(求二叉搜索树的属性)

如果root->val > val,搜索左子树,如果root->val < val,就搜索右子树,最后如果都没有搜索到,就返回NULL。给你一个二叉搜索树的根节点 root,返回 树中任意两不同节点值之间的最小差值差值是一个正数,其数值等于两值之差的绝对值。递归函数的参数传入的就是根节点和要搜索的数值,返回的就是以这个搜索数值所在的节点。给你一个二又树的根节点root,判断其是否是一个有效的二又搜索树。因为二叉搜索树的节点是有序的,所以可以有方向的去搜索。节点的右子树只包含 大于 当前节点的数。

2025-02-23 18:24:02 711

原创 2025-2-21 leetcode刷题情况(二叉树的修改与构造)

给定两个整数数组 inorder和postorder,其中 inorder 是二又树的中序遍历,postorder 是同一棵树的后序遍历,请你构造并返回这颗二又树。题目中说了输入的数组大小一定是大于等于1的,所以我们不用考虑小于1的情况,那么当递归遍历的时候,如果传入的数组大小为1,说明遍历到了叶子节点了。那么应该定义一个新的节点,并把这个数组的数值赋给新的节点,然后返回这个节点。参数传入的是存放元素的数组,返回该数组构造的二叉树的头结点,返回类型是指向节点的指针。注意:合并过程必须从两个树的根节点开始。

2025-02-21 17:30:28 693

原创 2025-2-20 leetcode刷题情况(二叉树)

确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

2025-02-20 10:03:12 309

原创 2025-2-19 leetcode刷题情况(二叉树)

首先搞清楚什么是对称二叉树,先判断左右节点,再判断左子树的左节点和右子树的右节点,再判断左子树的右节点和右子树的左节点。给定一个二叉树root,这返回其最大深度,二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。开启递归右子节点 invertTree(root.right),并将返回值作为root的左子节点。开启递归左子节点 invertTree(tmp),并将返回值作为root的右子节点。递归遍历(DFS)交换每个节点的左 / 右子节点,即可生成二叉树的镜像。返回值:返回当前节点root。

2025-02-19 16:01:09 243

原创 2025-2-18 leetcode刷题情况(二叉树层序遍历)

因为在处理当前层节点时,会将下一层的节点加入队列,所以需要提前记录当前层的节点数量。,用于存储最终的层序遍历结果,每一个内层列表代表二叉树的一层节点值。如果根节点不为空,将根节点加入队列,作为层序遍历的起始点。如果该节点的左子节点不为空,将左子节点加入队列,以便后续处理。当前层的所有节点处理完毕后,将存储当前层节点值的临时列表。给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。给你二叉树的根节点 root,返回其节点值的层序遍历。

2025-02-18 10:06:48 266

原创 2025-2-17 leetcode刷题情况(栈与队列Ⅲ)

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。比较队列中频率最小的元素(队首元素)和当前元素的频率。如果当前元素的频率更高,则移除队首元素,并将当前元素加入队列。,队列中存储的元素是长度为 2 的整数数组,数组的第一个元素代表数组中的值,第二个元素代表该值出现的次数。给你一个整数数组 nums 和一个整数 k,请你返回其中出现频率前 k 高的元素。从优先队列中依次取出元素,将元素的值(数组的第一个元素)存储到结果数组。键是数组中的元素,值是该元素出现的次数。

2025-02-17 19:28:18 241

原创 2025-2-17 leetcode刷题情况(栈与队列Ⅱ)

我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,用栈存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。这里有三种不匹配的情况,

2025-02-17 11:04:17 301

原创 2025-2-14 leetcode刷题情况(栈与队列)

一个队列为主队列,一个为辅助队列,当入栈操作时,我们先将主队列内容导入辅助队列,然后将入栈元素放入主队列队头位置,再将辅助队列内容,依次添加进主队列即可。要用两个队列来实现栈,首先我们知道,队列是先进先出,栈是后进先出。来源:力扣(LeetCode)来源:力扣(LeetCode)

2025-02-14 23:57:00 295

原创 2025-2-11 leetcode刷题情况(字符串)

让字符串 needle 与字符串 haystack 的所有长度为 m 的子串均匹配一次。为了减少不必要的匹配,我们每次匹配失败即立刻停止当前子串的匹配,对下一个子串继续匹配。将字符串 s 自身拼接,得到新的字符串 str String str = s + s;截取 str 去掉第一个字符和最后一个字符后的子串,检查该子串是否包含原始字符串 s。给定一个非空的字符串s,检查是否可以通过由它的一个子串重复多次构成。的第一个字符和最后一个字符后形成的子串,必然包含原始字符串。拼接起来得到的新字符串。

2025-02-11 10:04:24 117

原创 2025-2-9 leetcode刷题情况(双指针法)

采用排序加双指针的方法来解决四数之和问题。先对数组进行排序,这样方便后续去重和使用双指针进行查找。通过两层嵌套循环固定前两个数,再使用双指针在剩余部分查找满足条件的后两个数,同时在各个环节进行去重操作,避免结果中出现重复的四元组。链接:https://leetcode.cn/problems/3sum/solutions/11525/3sumpai-xu-shuang-zhi-zhen-yi-dong-by-jyd/来源:力扣(LeetCode)作者:Krahets。

2025-02-09 22:52:11 175

原创 2025-2-7 leetcode基础题目刷题情况(容易题)

先统计 licensePlate 中每个字母的出现次数(忽略大小写),然后遍历 words 中的每个单词,若 26 个字母在该单词中的出现次数均不小于在 licensePlate 中的出现次数,则该单词是一个补全词。返回最短且最靠前的补全词。遍历数组分别找到数组的最大值 m1和次大值 m2。如果 m1 ≥m2×2 成立,则最大值至少是数组其余数字的两倍,此时返回最大值的下标,否则返回 −1。为了返回最大值的下标,我们需要在计算最大值的同时记录最大值的下标。

2025-02-08 00:31:25 301

原创 2025-2-6 leetcode基础题目刷题情况(容易题)

这个代码用的动态规划算法来解决,动态规划的核心思想是将原问题分解为子问题,并保存子问题的解,避免重复计算。对于这个爬楼梯问题,我们可以定义状态和状态转移方程来求解。:从第 1 级台阶开始,也不需要额外花费,所以到达第 1 级台阶的最小花费为 0。:从第 0 级台阶开始,不需要额外花费,所以到达第 0 级台阶的最小花费为 0。级台阶爬一级到达,也可以从第。最终需要到达楼梯顶部,也就是第。作为到达楼梯顶部的最小花费。级台阶的最小花费加上从第。级台阶的最小花费加上从第。级台阶所需的最小花费。

2025-02-06 17:19:22 262

原创 2025-2-5 leetcode基础题目刷题情况(容易题)

因此,我们可以扫描已排序的数组,每次判断相邻的两个元素是否相等,如果相等则说明存在重复的元素。给你一个整数数组 nums,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)解集。先定义两个动态数组,一个用于临时存储当前正在生成的子集,一个用于存储最终得到的所有不重复子集。因为这种情况下如果选择当前元素,会生成和之前已经生成过的子集重复的结果,所以直接返回,不再继续递归。等于数组的长度时,意味着已经遍历完数组的所有元素,不选择当前元素,直接递归调用。),且当前元素不是数组的第一个元素(

2025-02-05 15:56:15 252

原创 2025-1-24 leetcode基础题目刷题情况(容易题)

为了应对这种情况,nums1 的初始长度为m+n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。给你两个按 非递减顺序 排列的整数数组 nums1和 nums2,另有两个整数m和n,分别表示 nums1 和 nums2 中的元素数目。给你一个 非空 整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。代码一通过对数组进行排序,然后直接返回排序后数组中间位置的元素来得到多数元素。异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。

2025-01-24 23:28:19 453

原创 2025-1-23 leetcode基础题目刷题情况(容易题)

再定义两个指针,快慢指针,进行循环,要求快指针不能大于数组的长度,再判断快指针所指的那个数是否与下一个数一致,不一致就赋值给慢指针,然后快慢指针向后移动一位,最后返回slow。给你一个非严格递增排列 的数组 nums ,请你 原地,删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一最高位数字存放在数组的首位,数组中每个元素只存储单个数字。nums 的其余元素与 nums 的大小不重要。作者:Krahets。

2025-01-23 22:54:46 382

原创 2025-1-20 leetcode刷题情况(字符串)

注意:输入字符串s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,目不包含任何额外的空格。给定一个字符串 s和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1)的额外空间解决这一问题。如果剩余字符小于 2k 但大于或等于 k个,则反转前 k个字符,其余字符保持原样。s中使用至少一个空格将字符串中的 单词分隔开。

2025-01-21 00:20:34 333

原创 2025-1-19 leetcode刷题情况(哈希表)

什么时候使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

2025-01-19 23:59:44 258

原创 2025-1-17 leetcode刷题情况

你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从0开始。实现 MyLinkedList类:MyLinkedList()初始化 MyLinkedList 对象int get(int index)获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1。

2025-01-17 23:58:17 447

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除