自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 动态规划 路径

动态规划 路径

2021-08-15 11:18:05 813

原创 容斥原理系列

容斥原理:指把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。假设班里有 10 个学生喜欢数学,15 个学生喜欢语文,21 个学生喜欢编程,班里至少喜欢一门学科的有多少个学生呢?最终状态(即 n)的范围非常大。试图自底向上递推或是按照通常的自顶向下回溯显然会超时(比如动态规划、DFS等方法)。第一时间应该想到二分法。

2024-04-14 13:14:18 21

原创 思维!!!

【代码】思维!!!

2024-04-13 11:42:44 12

原创 2024 春招冲刺百题计划 题单

两数相加题解中等旋转链表题解中等删除排序链表中的重复元素 II题解中等反转链表 II题解中等两两交换链表中的节点题解中等重排链表题解中等相交链表题解简单。

2024-04-07 18:03:33 44

原创 经典 topk

【代码】经典 topk。

2024-04-03 12:59:29 27

原创 七、其它线性 DP

七、其它线性 DP§7.1 一维发生在前缀/后缀之间的转移,例如从 f[i−1] 转移到 f[i],或者从 f[j] 转移到 f[i]。

2024-04-01 18:55:44 27

原创 五、状态机 DP

五、状态机 DP讲解:状态机 DP一般定义 f[i][j] 表示前缀 a[:i] 在状态 j 下的最优值。一般 j 都很小。代表题目是「买卖股票」系列。

2024-04-01 18:53:24 21

原创 四、经典线性 DP

四、经典线性 DP§4.1 最长公共子序列(LCS)讲解:最长公共子序列 编辑距离一般定义 f[i][j] 表示对 (s[:i],t[:j]) 的求解结果。

2024-04-01 18:51:12 29

原创 leetcode 估算题

TLE 在信息学竞赛及其训练中是 Time Limit Exceeded 的缩写,即时间超限,表示你提交的程序运行使用了超出题目限定的时间,故该数据点不得分,通常出现在信息学竞赛在线评测系统(Online Judge)的错误反馈,是信息学竞赛常用的术语之一。4、在OJ评测时加入了文件读写。由于无法读取到输入而时间超限。2、算法效率较低(时间复杂度过高)。

2024-03-08 15:56:00 215

原创 Java 存图方式

链式前向星是一种完全用数组存储图的邻接表的存储结构,插入、遍历的复杂度都是O(E)[E为边的数量];用树的思维无法解决的问题,可以使用图的思维来解决。

2024-02-25 17:34:01 77 1

原创 十二、树形 DP

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度。两节点之间路径的 长度 由它们之间表示。

2024-02-24 13:15:53 68

原创 石子游戏 I - IX

数学n 堆石子,按下标偶奇性分成二组。Alice 可以决定 Bob 只能取石子数量小的一组。Alice 总是可以赢得比赛。先手的 Alice 可以自由选择取走一组或二组的一堆石子。如果 Alice 决定取 piles[0],则剩下的部分在开始处和结束处的石子堆都属于第二组,因此 Bob 只能取走第二组的一堆石子。如果 Alice 取 piles[n - 1],则剩下的部分在开始处和结束处的石子堆都属于第一组,因此 Bob 只能取走第一组的一堆石子。

2024-02-03 13:33:03 113

原创 【扩散】元素

【代码】【扩散】元素。

2024-01-30 09:24:58 69

原创 消除类题目

【代码】消除类题目。

2024-01-22 09:29:50 67

原创 java split

limit :数组中字符串的数量限制。如果它为零,它将返回所有匹配正则表达式的字符串。regex : 应用于字符串的正则表达式。返回值:array of strings。

2024-01-20 11:27:40 397

原创 十一、数据结构优化 DP

单调栈上二分, Java 官方推荐使用 Deque 来模拟栈,Deque 没法直接通过下标检索(来实现手写二分),引入 TreeMap 辅助。floorEntry 方法找到第一个小于或等于指定 key 的 Map.Entry。ceilingEntry 方法找到第一个大于或等于指定key的 Map.Entry。java 数组模拟单调栈。

2024-01-10 20:33:50 265

原创 括号 系列

【代码】Leetcode 基础题。

2024-01-07 12:36:22 395

原创 树上倍增法求最近公共祖先 LCA

倍增其实就是二分的逆向,二分是逐渐缩小范围,而倍增是成倍扩大。用于解决一些静态树的查询问题。

2024-01-06 14:05:14 436

原创 Leetcode 超难题目 Hard

这道题很有可能是LC主站(LCP除外)新的天花板,之所以难度分没有超过1719题,是因为双周赛样本量本身不多,而这题有一定的“猜结论”。某个LC积分2900+的大佬认为,即使数据范围只有1000,这也是一道相当难的题目。因为记录dp[j]为最优时,nums[j]的最小值(注意nums[j]很可能是被改过的),这样的DP本身就很难想到。而同时保证dp[j]最大nums[j]最小是否就更利于后面的转移,这点非常难证明。这个题的数据范围并不是1000,因此需要单调数据结构优化来保证复杂度合理。

2024-01-05 19:28:17 1060

原创 矩阵对角线遍历

【代码】矩阵对角线遍历。

2023-12-31 09:29:39 772

原创 面积最大的蛋糕

1465. 切割后面积最大的蛋糕2943. 最大化网格图中正方形空洞的面积100169. 移除栅栏得到的正方形田地的最大面积

2023-12-24 14:03:55 95

原创 中位数 Median

462. 最小操作次数使数组元素相等 II2033. 获取单值网格的最小操作数2448. 使数组相等的最小开销2607. 使子数组元素和相等1703. 得到连续 K 个 1 的最少相邻交换次数2967. 使数组成为等数数组的最小代价564. 寻找最近的回文数

2023-12-18 13:14:24 487

原创 合并区间 Merge intervals

用一个哈希表/有序集合记录每个元素首次出现的位置和最后一次出现的位置,每个元素就对应着一个不可分割的区间。所以 [1,2,1,2][1,2,1,2] 这一段必须是完整的,不能分割。如果第二个区间和第一个区间没有交集,把合并后的区间个数 m 加一。如果第二个区间和第一个区间有交集,那么合并区间,维护合并后的区间的右端点 maxR。把该数组分到无法再分,得到 [3] + [1,2,1,2] + [4,4]再次遍历数组,那么第一个区间就是 [0, r[nums[0]]]。考虑每个 + 号选或不选,一共有 2。

2023-12-10 19:22:06 520

原创 快速幂 FastPower

的顺序,从 x 开始,每次直接把上一次的结果进行平方,计算 6 次就可以得到 x。的值,而不需要对 x 乘 63 次 x。「快速幂算法」的本质是。

2023-12-10 18:42:37 115

原创 二进制枚举

78. 子集77. 组合1286. 字母组合迭代器2397. 被列覆盖的最多行数2212. 射箭比赛中的最大得分1601. 最多可达成的换楼请求数目

2023-12-10 16:49:40 76

原创 List add、addAll 和 set

Java 中线性表 List 接口的插入方法有三大类,add、addAll 和 set。

2023-12-07 12:16:51 124

原创 离散化 Discretization

*离散化有一个很重要的前提:**只关心数据之间的相对大小关系。离散化,把无限空间中有限的个体映射到有限的空间中去。离散化是在不改变数据相对大小的条件下,对离散的数据进行相应的范围缩小。离散化过程,将一组实数转换为一组整数,使得原始数据的顺序和区间关系得以保留。将原始数据排序,然后为每个不同的值分配一个整数。这个整数是该值在排序后出现的位置,即离散化后的数值。

2023-12-05 15:01:06 116

原创 偏序 Partial Order

则称 P 是 A 上的一个偏序关系,通常记作 ≼。注意这里的 ≼ 不必是指一般意义上的"小于或等于"。若 P 是 A 上的一个偏序关系,用 a ≼ b 来表示 (a, b) ∈ P。整除关系便是一个定义在自然数上的一个偏序关系 |,3 | 6 的含义是 3 整除 6。大于或等于也是定义在自然数集上的一个偏序关系。

2023-11-20 22:01:07 326

原创 Java Integer.numberOfLeadingZeros()

对 i 进行判断,因为 int 型长度为 32,所以先判断 i 是不是大于 2^16,如果大于则无符号右移 16位,继续进行计算。例:10 的二进制为:0000 0000 0000 0000 0000 0000 0000 1010。返回无符号整型 i 的最高非零位前面的 0 的个数,包括符号位。如果 i 小于 0 则返回 0,等于 0 则返回 32。判断为 true,得到 n = 15,i = 4;判断为 true,得到n = 13, i = 1;最后相当于 13 - 0 = 13。

2023-11-18 12:43:23 182

原创 Python 简易 HTTP 服务器

对于局域网的其他用户,可通过你的主机 IP + 端口号访问,如你的主机 IP是192.168.0.1,那么将网址 192.168.0.1:8000 发送给你的同事或同学,他们也可以看到 index.html 文件渲染的内容。如果通过 VSCode 连接远程服务器,使用 http.server 开启一个端口后,会自动映射到本地,这样在本地浏览器就能查看和下载远程服务器资源。(除 VSCode 外,其他工具应该也可以实现远程与本地的端口映射)http.server 也支持在代码中调用,导入对应的类和函数即可。

2023-11-18 11:00:00 644

原创 字典树 Trie

的每个节点只有两个孩子,那如果每个节点可以有多个孩子呢?这就形成了「多叉树的子节点数目一般不是固定的,所以会用变长数组来保存所有的子节点的指针。」是一种特殊的多叉树,它的 TrieNode 中 chidren 是一个大小为 26 的一维数组(当输入只有小写字符),分别对应了 26 个英文字符 ‘a’ ~ ‘z’,也就是说形成了一棵「26 叉树」。Trie(发音类似 “try”),又称前缀树或字典树是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如。

2023-11-12 14:36:22 265

原创 TreeMap

【代码】TreeMap。

2023-11-12 10:27:44 110

原创 Java TreeMap

TreeMap 是一个基于 keykey value 散列表。

2023-11-12 10:10:52 255

原创 内向基环树

如果找到了一个之前访问过的点xx,且之前访问 x 的时间不早于 startTime,则说明找到了一个新的环,此时的环长就是前后两次访问 x 的时间差,即 clock−time[x]。基环树的关键就是找到环,可以先把环当作这个无根树的 “根” ,也就是把环当成一个点(先不管它),这样一颗基环树就变成了一个普通的树,然后先按照解决普通树的方法对“根”的所有子树依次处理求解答案,最后在单独对环上所有的点进行操作求解最终答案即可。对于不在基环上的点 x,其可以访问到的节点数,是基环的大小,再加上点 x 的深度。

2023-11-11 22:14:13 406

原创 Gosper‘s Hack

例如 二进制数 110110,我们需要找到它从左往右的最后一个 01,然后把这个 01 变成 10,再把它右边的 1 全部集中到最右边(这里右边的 1 显然都是连续的,否则与最后一个 01 矛盾),即 110110→111001。上面的代码有很多无效枚举,即大小不等于 cols 的集合,每次也要枚举进来。Gosper’s Hack 算法,让每次枚举的二进制数 1 的个数恰好等于 cols。Gosper’s Hack 是生成 n 元集合中所有包含 k 个元素的子集的算法。

2023-11-02 09:14:17 373

原创 2262. 字符串的总引力

据此,我们在从左往右遍历 s 的同时,对每个字母 s[i] 记录其上一次出现的下标 last[s[i]] 和上上一次出现的下标 prelast[s[i]]。记录字符 s[i] 上一次出现的位置为 pre(默认为 -1),加上 s[i] 之后,只会影响区间 (pre, i] 内所有以字符 s[i] 结尾的子串引力值,子串个数为 i - pre 即增加的引力值。特别地,如果 last[s[i] 或 prelast1[s[i]] 不存在,可以视作 −1,从而保证上式的正确性。

2023-10-29 14:11:08 293

原创 24_02_18

【代码】23_10_22。

2023-10-22 18:24:40 148

原创 欧拉图 Euler Graph

如果没有保证至少存在一种合理的路径,我们需要判别这张图是否是欧拉图或者半欧拉图,要求字典序最小,那么我们每次应该贪心地选择当前节点所连的节点中字典序最小的那一个,并将其入栈。为了保证我们能够快速找到当前节点所连的节点中字典序最小的那一个,我们可以使用优先队列存储当前节点所连到的点,每次我们 O(1) 地找到最小字典序的节点,并 O(logm) 地删除它。给定一个 n 个点 m 条边的图,要求从指定的顶点出发,经过所有的边恰好一次(可以理解为给定起点的「一笔画」问题),使得路径的字典序最小。

2023-10-21 14:07:54 273

原创 前后缀分解

前后缀分解

2023-09-24 18:08:18 296

原创 Python 1-13 列表实例

例如:n = 201, 201 - 9 - 90*2 = 12, m = 11, 此时第 N 位数字所在整数是 3 位数中第 m // 3 + 1 = 4 个数的第 m % 3 + 1 = 3 位。第 N 位数字,假设它属于第 num 个数,先确定 num 是几位数,再确定是该位数中的第几个,从而确定 num,最终找到是 num 的第几位然后取出。此时 i 是目标数字所在整数的位数, i 位数的第 n // i 个,第 n % i 位。集合 set set.add,去重功能,无序,分类。

2023-09-23 18:19:32 459

空空如也

空空如也

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

TA关注的人

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