自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode337周赛T4 -- 同余

我们只需要知道一个概念:“同余”。知道了这个点,那么题目就很好做了。,判断有没有余数与它同余的。那么我们只需要依次遍历。

2025-04-02 10:42:21 303

原创 Leetcode 6207 -- DP | 思维 | 双指针

我们可以把原数组看作由被不在[minx,maxn]范围内的数分隔的多个子数组,那么问题就转换成了如何在一个子数组中。方法很简单,枚举右断点就可以了。然后,如果我们希望我们的子数组的个数尽可能的多,那么左端点应该尽可能靠近右断点。思维本质上就是一个优化的双指针,所以这里只分析双指针。dp的思路真的太妙了,第一次看见这种思路。的找出所有满足要求的字数组。

2025-04-02 10:41:51 105

原创 LeetCode354 -- 最长上升子序列

因为我们按照左端点排序的,所以左端点肯定是升序(⚠️不严格升序)的,出于贪心的角度,我们肯定希望右端点越小越好,这样后面的区间就更容易合法。这样就可以完全避免左端点相等时多次选取的情况,因为如果左端点相等,那么右端点大的总是先出现,它先出现就会导致下一个区间的右端点匹配失败,之前都是直接排序,而无论是左端点优先还是右端点优先,假设左端点优先吧并且一般都是升序,我们一般是让右端点也升序的。只保存了右端点啊,如果你想要比较左端点,你就需要再保存它,那不就会到上面的讨论了吗?时,左右端点的最小值。

2025-04-02 10:41:20 481

原创 map和set对vector排序

的底层数据结构是红黑树,可以实现排序功能,而。排序,这应该是因为它们的底层数据结构不同,,无法实现排序功能。

2025-04-02 10:40:49 564

原创 O(1) 时间复杂度数据设计题

对于一个操作,可以分摊的前提是,你这个时间复杂度很高的情况只会执行常数次,那额,分摊到你每一次执行,就是常数+常数还是常数级别,只不过常数比较大罢了。不是的话就麻烦了啊,如果它在队列的中间,难道我们要把它之前所有元素取出来,在删除它,再把拿出来的元素再放回去吗?维护队列的最大值我们很容易想到滑动窗口,对于滑动窗口来说,我们可以很容易的维护不断添加元素时的最大值,但是当删除元素时,最大值该怎么维护呢?如果原队列当前删除的元素不是队头的话,说明,后面肯定有比它大的元素入队,并且作为队头,这意味着什么?

2025-04-02 10:40:39 170

原创 LeetCode1024 -- 二分

确实,二分其实是可行的!只不过我们要变换一下二分的条件,将“查找是否有满足条件的长为。其实我们是很容易想到二分的,但在这里,二分有一点小小的问题!这样,我们就能保证二分的连续行了!的区间”改为“查找是否有满足条件的长大于等于。,然后遍历整个区间,查找是否有满足条件的长为。的区间,因此,不具备连续性,也就不能二分。的满足题目要求区间,一定有长度为。的区间,一定存在长大于等于为。,那么,就是求最大的子区间。的满足题目要求的区间吗?其实是不满足的,例如,样例。的区间,却不存在长度为。的区间,显然成立的!

2025-04-02 10:40:17 568

原创 Leetcode 合集 -- 排列问题 | 递归

子集2全排列2排列总和排列总和2

2025-04-02 10:38:29 92

原创 SET_链表

的最大值,但是并没有一个函数可以快速求出小于等于。的上一个数(更小的数)一定是 小于(等于)立马看出题目让我们求的是满足大于等于数。由此想到二分,可以利用。(小于x的最大的数) 的时候,我写了。的最小的值,或者小于等于数。(大于x的最小的数) 求。中,我们可以利用函数。的最大的值,或者通过。实际上,我们可以通过。

2025-04-02 10:37:58 296

原创 printf打印浮点数

【代码】printf打印浮点数。

2025-04-02 10:37:52 39

原创 n数之和问题

两数之和 II - 输入有序数组 https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/solution/san-shu-zhi-he-bu-hui-xie-xiang-xiang-sh-6wbq/三数之和 https://leetcode.cn/problems/3sum/solution/shuang-zhi-zhen-xiang-bu-ming-bai-yi-ge-pno55/

2025-04-02 10:37:28 120

原创 LeetCode435 -- 预定会议问题

问题,而且由于区间之间不是严格大于的原因,为我们避免了不必要的麻烦!为什么要按照右端点排序?做法:贪心,按**【右端点】**排序。如果按照左端点升序的话,那么答案就是。了,但显然,答案应该是。

2025-04-02 10:36:57 533

原创 Leetcode 6233 -- DFS序列 | 两遍DFS

解释一下第二次 $DFS,如果我们删除了某一个节点和它的子树,那么此时树的最大高度就是在继续。给定一个序列,每次删除一个连续区间,求序列里剩下的数的最大值。显然删除一个连续区间后,序列会剩下一个前缀以及一个后缀。序里的一个连续区间。对于树的题目,学习到了一种新的算法(思路) –的过程中是无法知道这个值的,所以我们要在。)来表示遍历到当前节点之前,树的最大高度。时,我们就要更新这个值。求“删除”该节点后的最大高度。的参数中维护这个值(

2025-04-02 10:36:25 486

原创 Spfa求负环

求负环的常用方法,基于SPFA,一般都用方法2方法1:统计每个点入队的次数,如果某个点入队n次,则说明存在负环方法2:统计当前每个点的最短路中所包含的边数,如果某点的最短路所包含的边数大于等于n,则也说明存在环。

2025-04-02 10:34:35 427

原创 trie前缀树

模板题滑动窗口+前缀和可持久化malloc版本

2025-04-02 10:34:05 167

原创 spfa优化

spfa的优化都是基于deque的,我们通常使用LLL优化,代码简单,优化效果最好,详情可见,例题可以。

2025-04-02 10:33:18 278

原创 unique原理

将不重复的元素移动到前面来,并且仅仅是相邻元素之间去重。

2025-03-29 09:50:50 177

原创 单调栈问题

所谓单调栈,就是栈中的元素都是单调的。

2025-03-29 09:49:53 656

原创 程序员面试金典 17.18 -- 摩尔投票法

如果存在这么一个数,他的出现次数超过数组大小的一半,也就是说,他出现的次数之和大于其他元素的出现次数之和。这种找**“数组中出现次数超过一半的元素”**的题目的算法是固定的 – 摩尔投票法。另外需要注意,如果数组中不存在这个数,那么最终的结果是随机的。那么将这个数和其他数两两抵消之后,最后剩余的数的集合一定是它本身。设置一个候选人(数组中出现次数超过一半的元素)

2025-03-29 09:49:23 302

原创 待处理的奇怪的算法

1的3次方+2的3次方+3的3次方+4的3次方+…

2025-03-29 09:48:52 222

原创 砝码称重问题

Easy砝码问题大体上就是一个问你在背包中选n个物品,体积为j的方案是否存在的问题,求解问题的方式可能稍有不同,但核心都是。

2025-03-29 09:48:45 553

原创 二维数组和坐标系的对应关系

只不过是符号而已,下面的对应关系也没错。如果非要使用第二种方式,需要将下面代码的。只不过,我们一般用的时候,是将。当然,这个对应关系并不是死的,, 因此第一种方式更符合直觉。

2025-03-29 09:48:41 387

原创 二分图问题

最大边匹配:选出最多的边,使得这些边没有公共点最小点覆盖:选出最少的点,使得图中每一条边都至少有一个顶点被选最小路径覆盖:选出最少的互不相交(点不重复)的路径,将所有点覆盖(路径长可以为0,即单个点的情况)(一条路径可以包含多个点,例如1->3->4我们视为一条路径,这条路径包含了三个顶点134最小路径重复点覆盖:在最小路径覆盖的情况,去掉互不相交,例如(路径1->3->4和路径1->3->5,它们是相交的,交点是3。

2025-03-29 09:48:37 545

原创 差分约束【搜索】

下面的xi​就表示disti怎么判断一题是不是差分约问题:看问题能不能通过一堆不等式求解参考。

2025-03-29 09:48:22 718

原创 背包九讲【DP】

麻烦的点在于,对于不同的背包模型,我们的存放数据的类型是不一样的,例如,存放分组背包和普通背包的体积的价值的数组,一个是一位数组,一个是二维数组。背包都一样,都是借用上一层的状态转移,由于我们的体积是倒序枚举的,而费用那一维在体积之后,因此只需要倒序枚举体积即可确保状态是从上一层转移的。对于分组背包问题,有一个细节点,就是对于每个组内的物品,是放在体积之前遍历,还是放在体积之后遍历,还是都可以呢?),就相当于我们已经在当前层包括了不选当前组中的物品的情况,也即此时组内物品都不选的情况,这显然是不合法的。

2025-03-29 09:44:53 524

原创 背包问题 | 方案数 | 具体方案

而当物品体积不等于价值时,装满并不意味着就取得了最大价值,此时我们需要一个数组来专门记录这个最大价值,因为状态转移过程中需要用到。之所以有这样的不同是因为,在求装满时的方案数时,体积等于价值,由于任意转移过程中最大价值就等于此时的体积,因此我们无需专门的。还有就是需要注意,在装满背包求方案数问题当中,只能初始化。求恰好装满的方案数与最优选法时的方案数的做法大不相同。来求,但求最优选法时的方案数是跟踪记录。时,我们什么都没法选物品,是一种方案。时,我们没物品可选,这也是一种方案!数组的含义清楚的看到,前者。

2025-03-29 09:44:22 629

原创 根据合法性边的权值视为0/1

求最短路,将需要升级的边的权值看作。,这样求得的最小值就是需要升级的次数。,不需要升级的边的权值看作。思路:二分枚举答案 +

2025-03-29 09:43:38 549

原创 浮点数二分

【代码】浮点数二分。

2025-03-29 09:43:34 121

原创 迭代加深 & IDE*

首先,它是深度优先搜索,其次它与普通深度优先搜索不同的是,每次深搜都会有搜索的最大深度限制,如果没有找到解,那么就增大深度,再进行深搜,如此循环直到找到解为止,这样可以找到最浅层的解。while(!IDA*,即基于迭代加深的A*算法IDA*实质上就是对迭代加深加了一个启发式的剪枝。

2025-03-29 09:43:06 1007

原创 次短路问题

要么是满足最短路要么满足次短路),然而事实是,次短路和最短路都可能用来更新其他节点,因此我们需要。中次短路也满足拓扑序,因此我们可以用。的次短路,如果不拆点的话,那么每个。只会出队更新其他节点一次(即。不满足拓扑序,除非我们先用。的问题,注意不能直接用。预处理,但那样太麻烦。

2025-03-29 09:42:27 362

原创 回溯去重【去重问题】

在解决去重之前都一般都需要排序,并且还需要在搜索的时候使用一个参数 startIndex,判重的时候使用一个数组 used。注:组合不要求顺序,排列问题要求顺序。例如:{1,1,2}和{1,2,1}是同一个组合但不是同一个排列。排列问题在树层和树枝上去重都可以,其它只能在树层去重。排列问题:N个数按一定规则全排列,有几种排列方式。子集问题:一个N个数的集合里有多少符合条件的子集。组合问题:N个数里面按一定规则找出k个数的集合。切割问题:一个字符串按一定规则有几种切割方式。重复分为树层重复和树枝重复。

2025-03-29 09:40:11 247

原创 剑指Offer11 -- 二分

需要注意的一点是,由于我们在二分过程中改变了。的位置,因此不能一直使用预先存放的。对二分的奇怪知识增加了!

2025-03-28 19:04:03 286

原创 剑指Offer140【DP】

因为两段肯定包含三段,四段的情况,而三段不可能包含两段的情况,除非你划分一个。,NO NO NO,不是这样的!(当然,样例够用就行)的绳子划分之后的最大长度,看看有没有什么规律。为什么是划分为两段,而不是三段,四段。这题的思路还是比较简单的,就是划分子区间,一个长度为。,可以看出,它不划分时的乘积更大!作为被划分的子区间时才可以不继续划分,如果。了,同理,四段不可能包含两段和三段的情况。,我们是必须要划分的,但是划分之后的长度。,可以发现,他们划分之后的长度不是。,可以划分,也可以不划分!

2025-03-28 19:03:32 662

原创 剑指Offer26 -- 树

当然,爆搜归爆搜,不要忘了剪枝。小小的剪枝大大的优化。有个小优化,那就是在枚举每个点,并以当前点搜索的时候,要保证。相等,否则就不搜,这样可以节省很多时间。,当已经找到后,后面的就不着了,提前结束。另外,将是否找到作为一个全局标记。中的每个节点,对于该节点。2.好像没有优化的做法?

2025-03-28 19:02:58 526

原创 剑指Offer29 -- 模拟

【代码】剑指Offer29 -- 模拟。

2025-03-28 19:01:46 206

原创 剑指Offer35- - 链表

思路呢,也很简单,既然随机指针可能指向一个还未创建的节点,那么我们就先创建它,然后通过哈希表存起来,并与原链表的相应节点做映射。这样,当我们下次遍历到这个随机节点时,我们可以检查一下哈希表,看看是否已经建立过了,避免重复创建节点。注意在计算空间复杂度时,是不考虑创建新链表产生的空间的,因为那是必须的,我们主要考虑的时。首先,这题绝对没你看上去的那么简单,复制链表?本题有一个有意思的地方,就是它有一个随机指针,随机指针以为着什么?因此说,我们不能直接遍历链表,来创建新链表,需要一些特殊方法。

2025-03-28 19:01:11 1014

原创 落谷 R94951828 -- 位运算|质数|思维

所以我们预处理所有质数它们的最高位是哪一位,并开个桶记录一下,对于每个询问把。的二进制中的每一位,当且仅当。的二进制中最高位是第。那么题目就转化为了求。

2025-03-28 19:00:41 855

原创 落谷 R94681591 -- 并查集+离线算法+倒序处理

因为更改点的权值不会改变树的结构,但是删去一条边会改变树的结构,不同与增加一条边,删除一条边的处理是很麻烦(没实现过!3.另外就是由于我们是倒着处理,因此需要倒着输出答案。(倒序处理基本都是需要倒着数处答案的吧!,因为我们的的本意只是修改节点的权值,但是我们把整颗树的权值修改了!(体现在代码中就是并查集的根),如果我们直接修改。这类问题的通用解法是:先保存删边,然后倒叙处理。2.关于节点权值的修改,我们需要一个额外的数组。既然我们无法删除一条边,那么我们可以倒着加边!开始了),但我代码中边的下标从。

2025-03-28 18:59:45 736

原创 剑指Offer57 -- 数学_滑动窗口(双指针)

O(N) 数学做法。

2025-03-28 18:59:15 290

原创 马拉车算法

【代码】马拉车算法。

2025-03-28 18:58:42 157

原创 剑指Offer49 -- DP_贪心

其实呢,这题,想到是不太好想,看别人的分析也不太容易看懂,但是看代码就一看就懂了。其实这题,就像贪心,因为丑数只能从另一个丑数通过(pre都是丑数),的方式得到,因此,找出nnn个丑数时很容易的。难点在于,如何保证这nnn个丑数恰好是最小的nnn个呢?贪心呗!如果,我们希望通过得到的丑数尽可能的小,那么,当然也要尽可能的小,那么,我们就每次枚举最小的pre。如果使用过了,就要增大pre,并且我们希望增大的幅度近可能的小,那么与preprepre。

2025-03-28 18:58:12 720

空空如也

空空如也

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

TA关注的人

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