自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣题解(新增道路查询后的最短距离II)

本题考虑的是并查集的思路,将关注的重点放在边上,起初的时候每个节点i,f[i]+1表示其所能指向的最远的边,然后考虑的是从0到n-1一共有多少条边就行,每当遇到一个从l到r的边,就把从l+1开始到r-2的点都合并到r上,(r-1因为本来就有到r的边所以不用合并),每次合并都使得边的数目减少一,所以只需要记录一下边减少的数目,在和边原本的数目相减就是加上一条边以后最短距离了。开始考虑的是二分搜索,因为觉得既然有l到r的边,那么就不用考虑l到(l+1,,,,r-1)之间的。每次查询后,你需要找到从城市。

2024-11-20 08:54:15 453

原创 力扣题解(新增道路查询后的最短距离I)

此外,本题还会发现,如果你对一条从a到b的边进行更新,所影响的只会是b之后的边,对于b之前的边不会有任何变化,也可以考用dp动态递归,每次加入新的边之后,如果这条边不会影响从0到b的最短距离,就不会影响b之后的最短距离,那就不会变化。反之,如果影响了从0到b的最短距离,就需要对b之后的边进行重新计算,具体计算方法是对于一个大于b的点q,暴力遍历所有0--q-1中到q的边,然后看是否可以更新0到q的最短距离。因为是要找以q为终点的距离,因此设置这个边的数组的时候可以保存以j为终点的边在dis[j]中。

2024-11-19 08:35:13 463

原创 力扣题解(最小翻转次数使得二进制矩阵回文II)

然后,对于空出来的那一行或者一列(如果行或列是奇数的时候才会有这种情况),还需要额外处理这一行或者列的元素,此处以行为例子说明,列的做法同理。如果diff不为0,那么满足1的个数%4==0的最小翻转方法就是翻转diff次,因为翻转diff次绝对可以使得当前1的个数%4==0,比如diff等于1时,当前1的个数一定是奇数个,是1或者3,是1就将1翻转成0,是3就将0翻转成1,对于大于diff的情况,只需要一个按照上述翻转方法,其余无脑变成0就一定满足1的个数%4==0.,也就是将格子里的值从。

2024-11-16 07:59:36 624

原创 力扣题解(统计满足k约束的子字符串数目)

对于求解右端点,可以利用双指针的算法,思路是找每个右端点是哪个左端点的的符合条件的右端点,这样,对于一个右端点更大的位置,其对应的左端点一定是更大的,两指针都是只能向右侧移动,具体求解办法就是遍历字符串,对于下标i,如果当前j下标到i下标符合k约束(代码中是找到最右侧不符合的那个那个i),则r[j]=i,否则j++一直到符合k约束。对于k到r这个区间,则可以考虑用前缀和数组来求解,规定前缀和数组是从0到当前位置的所有子字符串的数目,这样两端点相减就是k到r这一块的子字符串的个数。的 子字符串 的数量。

2024-11-13 08:36:07 391

原创 力扣题解(大礼包)

具体遍历方式:对于当前的需求curneed,先考虑全部用单买的方式得出一个价格,然后对所有礼包进行遍历,如果当前礼包买完以后,剩下需要的物品数目不会有负数,那么表示当前买这个礼包是合法的(因为本题要求精确的买每一个需要的物品,数量不能超过所需要的数量),那就用同样的方式,找到去掉这个礼包之后的需求的最大值money,用money加上礼包的价格,和当前需求的最小花费比较,得出更小的当前最小花费,最后返回题目要求的nee的的最小花费就是结果。假设礼包是M个,物品是n个,每个物品需要的数目不超过N。

2024-11-03 16:12:29 408

原创 力扣题解(冗余连接)

如果有冲突,那要进一步判断,首先通过冲突记录的下标,可以得知被指向的点是V,冲突边是 U->V,而原本用的边是parent[V]->V,对于原本用的边,如果此时还有环,那么一定是原本用的边导致的,因为U->V这条边不能又去冲突又去形成环,那么要去除的边就是parent[V]->V,反之,若没有形成环,要去掉的边就是U->V;对于有向的情况,可能要删除的边会导致两种情况:一种是形成一个大环路,首位连接那种,此时每个点都有且只有一个父节点。分别记录出现环的时候的边的下标和出现冲突的时候的边的下标。

2024-10-28 17:23:05 397

原创 力扣题解(执行操作可获得的最大总奖励II)

由于变化是连续的一部分一起变换,且变换的具体情况和原本另一块区域是一致的,即用(0-----reward[i]-1)去更新(reward[i]-----2*reward[i]-1),且一一对应,因此可以考虑位运算直接左移reward[i]位在进行或运算。对于同类型的获取最大总奖励I,由于数据量小,因此采用01背包问题的思路,在O(N^2)的时间复杂度内也能顺利通过,本题由于数据长度和数据大小都是5*1e4,因此最坏时间复杂度是2.5*1e9,超出了时间上限。此处考虑时间的优化。为 0,所有下标都是。

2024-10-26 08:41:31 250

原创 力扣题解(找到连续赢k场比赛的第一位玩家)

本题n是1e5,因此需要考虑小于n平方的做法,又每个位置的选取和后续有关系,因为如果当前i位置可以一直赢到j位置,则在【i,j】内j是最大的元素,且任意从i+1到j-1的元素所能赢的最大连续数目小于i位置赢得最大连续数目,因为这些位置的值一定小于i位置的值,而i位置的值又小于j位置的值,因此最大就是到j位置就结束。再看一下本题的要求,失败者会放到最后,这就隐含了一个条件,当前是胜利者的位置的值,一定比所有已经到后面的值要大,因此如果有个位置能一直赢到n-1位置的值,那么他一定就是胜利者。

2024-10-24 09:32:00 273

原创 力扣题解(统计逆序对的数目)

如果0--endi-1个数,没有在requirement数组中出现过,分析0--endi-1个数字要提供的逆序对的个数,最多是cnt个,最少是max(cnt-endi,0)个,此处之所以这么表示,是endi最多只能提供endi个逆序对,则0--endi-1最少提供cnt-endi个,又提供数目不能小于0,所以是两者中的最大值。因此,只需要依次求(endi-1,cnt1)返回的结果的和就是所要求的结果,其中cnt1要满足在 max(cnt-endi,0)到cnt之间。如果满足以下条件,那么它们被称为一个。

2024-10-17 09:44:25 507

原创 力扣题解(鸡蛋掉落)

f[i][j]的值取决于选择的楼层k,k从1到i,对于一个确定的k,若鸡蛋碎了,则楼层范围变成k到i,一共i-k层楼,j-1个鸡蛋,就是f[i-k][j-1],若鸡蛋没碎,则楼层变成k-1层,鸡蛋仍然是j个,就是f[k-1][j],f[i][j]就是所有k取值的最小值,因此暴力做法就是三重循环,第一重表示总的楼层数,第二重是当前的鸡蛋数,第三重是选择丢鸡蛋的楼层,时间复杂度是O(N^2 *K),其中N表示楼层数,k表示鸡蛋总数,会超时。对于二分,若交点刚好是整数,则最小的解就是当前的交点。

2024-10-14 21:35:54 445

原创 力扣题解(鸡蛋掉落,两枚鸡蛋)

f[i]表示从一共i层楼丢的最小操作次数,对于f[i]的计算,其结果取决于第一枚鸡蛋从哪里丢,即从第一层楼到第i-1层楼开始丢,规定丢的楼层是k,则对于从k层楼丢有两种情况,鸡蛋碎了和没碎,若碎了,则不会碎的楼一定是在第1层到第k-1层,由于此时只剩下一枚鸡蛋,要从第一层开始一层层测试,因此最多还需要k-1次。若没有碎,则一定是在第k层到第i层之间,就是f[i-k]。首先,从越高的楼往下丢,一定要比从低的楼往下丢要耗费更多比较次数,且从高的楼往下丢的结果依赖于从低的楼向下丢,因此是动态递归。

2024-10-14 21:23:29 391

原创 算法(食物链)

240. 食物链动物王国中有三类动物 A,B,C𝐴,𝐵,𝐶,这三类动物的食物链构成了有趣的环形。A𝐴 吃 B𝐵,B𝐵 吃 C𝐶,C𝐶 吃 A𝐴。现有 N𝑁 个动物,以 1∼N1∼𝑁 编号。每个动物都是 A,B,C𝐴,𝐵,𝐶 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N𝑁 个动物所构成的食物链关系进行描述:第一种说法是1 X Y,表示 X𝑋 和 Y𝑌 是同类。第二种说法是2 X Y,表示 X𝑋 吃 Y𝑌。

2024-10-04 22:28:47 753

原创 算法(最大异或对)

143. 最大异或对​​​​在给定的 N𝑁 个整数 A1,A2……AN𝐴1,𝐴2……𝐴𝑁 中选出两个进行 xor𝑥𝑜𝑟(异或)运算,得到的结果最大是多少?

2024-10-04 22:19:08 376

原创 力扣题解(飞机座位分配概率)

当处于i位置时,则二号乘客到i-1号乘客,都可以顺序入座,i号乘客要在1号座位或者i+1到n号座位中入座,此时有n-i+1个乘客,n-i+1个座位,乘客编号是i.i+1,i+2,.....n,座位编号是1,i+1,i+2,....n.可以发现,只有一个编号和乘客是不对应的,但是此时把座位1编号看成i不会有任何影响,因为能对结果产生影响的是乘客坐的相对位置,而不是单纯的编号对应乘客。f(n-1)=1/(n-1)+1/(n-1)*f(n-1-i+1)(i从2到n-2).位乘客坐在自己的座位上的概率是多少?

2024-10-04 09:28:55 479

原创 算法( 二分图的最大匹配)

给定一个二分图,其中左半部包含 n1𝑛1 个点(编号 1∼n11∼𝑛1),右半部包含 n2𝑛2 个点(编号 1∼n21∼𝑛2),二分图共包含 m𝑚 条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图 G𝐺,在 G𝐺 的一个子图 M𝑀 中,M𝑀 的边集 {E}{𝐸} 中的任意两条边都不依附于同一个顶点,则称 M𝑀 是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。

2024-10-03 22:39:46 427

原创 数据结构(染色法判定二分图)

对于每个点进行判断,若当前的点未染色,则染成一个颜色,然后对于相连接的点,都染成另一种颜色,若有相连的点已经有颜色,则进行判断,若是同一种颜色则不是二分图,返回false,若所有点染色都成功,则是二分图,返回true。这所以这样做,是因为有些点之间可能不存在通路,所以要对所有点都进行染色。染色法基于一个定理,即奇数点构成的环一定不是二分图,证明:假如是同一类的两个同类的点相连,则在环除了这两个点以外的点,应该都满足交叉的,则必定会有奇数个,再加上这两个点,一共是奇数个点,因此一定不是二分图。

2024-10-03 22:32:48 452

原创 力扣题解( 规定时间内到达终点的最小花费)

本题每一次选择城市都会影响到下一次城市的选择,因此可以采取动态递归的策略,正常设计数组dp,应该是dp[i][j]表示前i个城市用时在j的最小花费,但是由于本题是所有城市双向道路连接在一起,因此如果i从小到大遍历,后面结果变化可能会影响到前者,因此这么设计存在一定问题,需要更换dp[i][j]中i和j代表的含义,可以采用i表示花费的总时间,j表示到j城市,这样做的好处是i大的时候的变化都是由i小的时候得到的dp所决定的,而i大的dp[i][j]的变化又不会影响到之前的dp,因此方法是可行的。

2024-10-03 22:24:26 495

原创 acw(树的重心)

给定一颗树,树中包含 n𝑛 个结点(编号 1∼n1∼𝑛)和 n−1𝑛−1 条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。

2024-09-27 23:15:19 238

原创 力扣题解(每种字符至少取k个)

反向理解,既然题目要求从最左边和最右边取连续的一些数,不妨考虑在数组中取中间连续一段,符合条件:每个字符出现的次数要比该字符出现的总次数少大于等于k个。然后,用一个数组nums,记录当前取得范围每个字母出现的次数,只要nums[i]<=num[i]-k,就表示可以继续插入,记录符合条件的最大长度。需要注意每次放入新字符,需要先判断是否符合条件,再去算长度,先后次序不能颠倒。因此,先经过一次循环,利用数组num记录a,b,c各自出现的次数。最后总长度减去上述求出的最大长度就是最小取的次数。

2024-09-27 08:36:30 236

原创 力扣题解(公司命名)

而求prea中不是backb的部分,就是求backa和backb的差集,就是backa-(backa∩backb)。求交集的时间最坏是O(nlogn),即各占n/2左右,每次找一个是否在另一个集合中是O(logn),因此最差是O(NlogN)。对于两个名字,分别是prea,backa ,preb,backb,只有prea!=backb才能组合,因此,只需要求出prea数组中,不包含backb的部分backa;首先,先思考两个什么样的名字才能满足条件组合,必须是首字母不同,且后缀不相同,才可能能组合。

2024-09-25 09:32:31 307

原创 字符串哈希

然后,根据前缀和的公式,从l到r的哈希值就和h[r],h[l-1]有关,而h中存放的是前缀和,因此要把h[l-1]左移r-1-(l-1-1)位置,即乘以p的(r-1-l+1+1)次方,再相减。首先利用一个前缀和,存放在h[N]中。h[i]表示从第一个字符到第i个字符的字符串所对应的一个哈希值,该哈希值参考了进制的做法,因此用p进制表示,p是一个具体的数。此处规定p=131或者13331,取模规定是2的64次方,这样哈希冲突是基本没有的,也就是说这个做法是忽略哈希冲突的。

2024-09-24 23:04:26 228

原创 模拟哈希表

该方法是对于每个哈希冲突的位置,用一个模拟链表来存储,然后每次查找都是从这个模拟链表的头部开始依次查找,直到找到或者到了链表尾部才停止。因此,对于下标i,j,实际上是e[i]->e[j]。即利用下标获得指向的数,也利用下标得知本位制存放的数。模拟链表的方式是用e[i]表示i下标存放的实际的数,ne[i]表示i下标所指向的下一位的下标。

2024-09-24 22:57:39 237

原创 力扣题解(字符串中最多数目的子序列)

对于在i位置插入,如果插入pattern[0],则只可能影响到i往后的位置的所有结果数目,如果插入pattern[1],则只可能影响到i之前的所有结果数目,而这个影响的数目,又和i前面的pattern[0],i后面的pattern[1]的个数有关,因此只需要先计算出没有插入的时候的所有数目,再加上某个位置最大的pattern[0],pattern[1]的个数就行。如果子序列是两个一样的数,确实在中间位置插入会影响到前后两侧,但是结果也只会和在两侧插入是一样大的。字符,这个插入的字符必须是。

2024-09-24 10:46:36 467

原创 kmp快速匹配

优化思路是对于每次查找完成以后,下一次比较的位置不一定要从当前比较的头部的下一个位置开始,而是可以从其余地方开始,也就是B可以一次移动多个位置再比较。这就和B的字符串本身有关,假设ne[j]=i,表示从0-i的字符串和从j-i到j的字符串是一致的,则此时就无需再比较0-i的所有元素了,也就是简化了比较次数。对于匹配A的过程,就是每次B的j+1位置和A的i位置匹配不成功,则j跳转到ne[j]重新匹配。暴力的做法是从A的每个元素开始,依次比较看是否有和B相同的子串,时间复杂度是o(N*N)

2024-09-23 20:31:52 232

原创 力扣题解(最佳观光组合)

利用ans保存0-i最大的观光分数,对于求ans,可以通过题发觉对于i位置,若取i位置的观光景点,则最大得分只会和前面0----i-1里的values[j]+j有关,所以可以用mx保存0---i-1中的最大values[j]+j,则ans的最大值可能是mx+value[i]-i,然后每次判断完ans后更新mx即可。个观光景点的评分,并且两个景点。返回一对观光景点能取得的最高分。)组成的观光组合的得分为。,也就是景点的评分之和。它们两者之间的距离。

2024-09-23 20:10:22 393

原创 力扣题解(统计特殊整数)

若n的位数是k,则对于位数在1-k-1的所有数,都满足一定小于n,则可以直接全求出来,基本方法就是对于位数是h的所有数,最高位可以从1-9中取得,有9种可能,次高位可以取0-9中除了最高位取得的那一位之外的数,同样有9种可能,再下一位也是从0-9种除了最高和次高两位之外的数,有8种可能,以此类推下去,就是有7,6,5....种可能,因此可以直接全求出来,式子是9*9*8*...(有几位能乘几个数)。其次,对于位数是k位的,同样分两种情况,最高位小于n和最高位等于n。之间特殊整数的数目。

2024-09-20 19:56:39 318

原创 离散化c++

首先将所有要用到的数存放在数组all中,并且进行去重和排序,方便后续用二分查找得到相对于的下标,然后用一个num数组,存放数字和该位置变换的大小,后续会在前缀和数组中用到,简化在l到r区间大小的计算。add数组存放离散化后的数字对应变化,与前面不同的是,此处是利用find联系离散前和离散后数字的下标,然后找到相应位置加上数字,再利用sum求前缀和,这样l到r区间的变化就可以用s[r]-s[l-1]来实现。我们要求的是[ l , r ] [l,r][l,r]区间里面的和。最后m次询问每行两个数l,r;

2024-09-19 20:38:47 412

原创 JZ62 孩子们的游戏(圆圈中最后剩下的数)

JZ62 孩子们的游戏(圆圈中最后剩下的数)new中等 通过率:33.14% 时间限制:1秒 空间限制:256M知识点。

2024-09-06 16:24:24 478

原创 C140 杨辉三角

C140 杨辉三角new简单 通过率:29.57% 时间限制:1秒 空间限制:256M知识点校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

2024-09-05 21:21:43 420

原创 腐烂的苹果

腐烂的苹果new时间限制:1秒 空间限制:256M知识点。

2024-09-05 21:19:16 321

原创 NC242 单词搜索

NC242 单词搜索new中等 通过率:17.73% 时间限制:1秒 空间限制:256M知识点。

2024-09-05 21:16:52 171

原创 Fibonacci数列题目

Fibonacci数列题目时间限制:1秒 空间限制:32M知识点校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

2024-09-05 21:14:32 295

原创 牛客(除2!)

来源:牛客网。

2024-09-05 21:12:53 443

原创 牛客(最小花费爬楼梯)

最小花费爬楼梯new时间限制:1秒 空间限制:256M知识点。

2024-09-04 14:25:18 294

原创 牛客(点击消除)

点击消除时间限制:1秒 空间限制:256M校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

2024-09-04 14:23:28 202

原创 牛客(两个数组的交集)

NC313 两个数组的交集new简单 通过率:29.64% 时间限制:1秒 空间限制:256M知识点。

2024-09-03 21:27:33 347

原创 牛客(数字统计)

NOIP2010]数字统计new时间限制:1秒 空间限制:128M知识点校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

2024-09-03 21:22:03 277

原创 力扣(距离相等的条形码)

重点是必须先存放出现次数最多的元素,极端情况下出现次数最多的元素可能是(n+1)/2个,此时相当于最后求出的数组,每间隔两个位置都有一个该元素,如果不先排该元素,则必定会在前面几个两两为一组的小组中没有一个该元素,则后面必定会出现该元素重复存放。对于出现的最大次数是(n+1)/2,是假设每两个相邻元素为一个小组,若没有重复,极端情况下是每个小组的第一个元素都是该元素,而最后一个小组可能只有一个元素,也可能有两个元素,因此是(n+1)/2.首先利用一个数组保存每个元素出现次数,即dp[i]表示i出现的次数。

2024-09-02 20:37:18 519

原创 力扣(可被三整除的最大和)

方法二:先整体求出所有数的和sum,然后判断宿命对3的余数,如果是0,则直接返回。若是1,则结果可能是sum减去一个余数是1的元素,或者sum减去两个余数是二的元素。若是2,则结果可能是sum减去一个余数是2的元素,或者sum减去两个余数是一的元素。方法一:利用一个长度为3的数组,分别保存0到i内余数为0,1,2的最大和,这样对于一个进入的数k,依次更新数组每一个元素,最后dp[0]就是所要求的结果.,请你找出并返回能被三整除的元素。

2024-09-02 20:30:01 405

原创 力扣(俄罗斯套娃信封问题)

但是有一点不同的是,可能有宽度一样的存在,此时哪怕高度高也不能放到一块,因此宽度必须满足大于才行,因此对于宽度相同的数,如果按照高度递减排序,这样就一定不会出现宽度相同而高度由小到大的情况,在这种情况下直接找递增序列就可以了。首先,需要同时有宽和高都大于才能包含,因此同一时间需要比较两方面的数字,因此需要先固定其中一种数字,这样只需要对另一种数字进行比较,这里选择按照宽度由小到大排列,这样对于i位置和i+1位置,只要i+1位置高度大于i位置高度,则两者一定可以包含在一起。最后返回的就是有序数组的高度。

2024-09-02 16:46:35 380

空空如也

空空如也

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

TA关注的人

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