自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 golang中实现LRU-K算法(附带单元测试)

LRU-K中的K代表最近使用的次数,因此LRU可以认为是LRU-1。LRU-K的主要目的是为了解决LRU算法“缓存污染”的问题,其核心思想是将“最近使用过1次”的判断标准扩展为“最近使用过K次”。相比LRU,LRU-K需要多维护一个队列,用于记录所有缓存数据被访问的历史。LRU-K具有LRU的优点,同时能够避免LRU的缺点,实际应用中LRU-2是综合各种因素后最优的选择,LRU-3或者更大的K值命中率会高,但适应性差,需要大量的数据访问才能将历史访问记录清除掉。将LRU算法升级为了LRU-K算法。

2024-07-19 17:36:58 386 3

原创 高级数据结构——树状数组

树状数组(inaryndexree,),是一种一般用来处理和操作类型的题目的数据结构,时间复杂度为O(log n)。对于普通数组来说,的时间复杂度是 O(1),但的时间复杂度是 O(n)。如果使用前缀和数组呢?区间求和的时间复杂度降低为O(1),但是单点修改又会变为O(n)。那么,我们能不能找到一种数组,中和两者的时间复杂度都不那么高?

2023-11-16 13:46:22 504

原创 置换环算法

思路:我们需要将每对情侣都放在一块,编号 0 和 1 的人对应情侣 0,编号 2 和 3 的人对应情侣 1... 即编号为row[i]对应的情侣编号为row[i]/2(c++向下取整)。所以,我们通过一次遍历,通过并查集找出共有多少个置换环,交换次数就等于数组个数-环的个数,即n - x 为所求答案。置换环思想:置换环是将每个元素指向其应在的位置,最终相连成一个环(若元素就在其应在的位置,则自身成环),因此可知元素的相互交换只会在该环内进行,所以可以得出每个环内所需的交换次数即为元素个数-1。

2023-11-11 16:40:43 457 2

原创 搜索——最短路模型,多源bfs

最短路模型,即求从起点到终点的最短路径,我们可以选择dijkstra,spfa等等,在这里我们可以利用宽搜(bfs)的特性来求,因为bfs是一层一层的向外扩展的,所以当我们第一次遍历到终点时,所在的层数即为起点到终点的最短路径。多源bfs,顾名思义,多个起点的bfs,与一般的bfs不同的地方在于根据题目要求,将多个起点在初始时全部加入队列即可,后续遍历和普通bfs没什么不同。它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

2023-09-21 13:18:32 220

原创 搜索——flood fill

flood fill,即洪水泛滥,用来解决连通块问题,通过宽搜(bfs)找到某个点所在的连通块,用深搜(dfs)的话,在数据范围较大的时候可能存在爆桟的情况。农夫约翰有一片 N∗M 的矩形土地。最近,由于降雨的原因,部分土地被水淹没了。现在用一个字符矩阵来表示他的土地。每个单元格内,如果包含雨水,则用”W”表示,如果不含雨水,则用”.”表示。现在,约翰想知道他的土地中形成了多少片池塘。每组相连的积水单元格集合可以看作是一片池塘。

2023-09-19 13:06:58 127

原创 动态规划——状态机模型

什么是状态机模型?其实大部分dp问题都可以算是状态机,因为对于一个物品,例如01背包,无非是选与不选两种状态,这两种状态就构成了一个状态机。状态机就是一种用来描述对象或者系统在不同状态之间迁移的模型。那么状态机dp是什么?阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有 N 家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。

2023-09-16 21:04:56 186

原创 动态规划——多重背包

多重背包是有N种物品和一个容量为V 的背包,第i种物品最多有Mi件可用,每件耗费的空间是Ci ,价值是Wi ,求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量,且价值总和最大。多重背包和01背包很像,将多重背包里的物品全部摊开就是01背包了。有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。

2023-09-16 13:24:27 109

原创 动态规划——完全背包

有了上一篇的学习,如果想要使物品能够被多次放入,我们只需要从小到大的去枚举背包容量即可,至于已经在上一篇阐述了,不会的可以去看看。而如果是先遍历容量的遍历顺序,在计算dp[6]时,枚举第0个硬币时会得到{5, 1},因为dp[6] += dp[6 - 1] ,而枚举第1个硬币又会得到{1, 5},所以可以发现先遍历容量得到的结果就是排列数。先看先遍历物品的遍历顺序,由于我们是按照物品的顺序来遍历的,只会先计算1,再计算5,因此得到的方法数量只有{1, 5}这种情况,即组合数。

2023-09-16 10:55:09 104

原创 动态规划——01背包

背包问题经典资料背包九讲,可以上网查一下相关资料。背包一共分为01背包,完全背包,多重背包,分组背包,和混合背包,下图来自代码随想录01背包是有n件物品和一个最多能背重量为w 的背包。且每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。根据动态规划的一般步骤来解决一下并给出01背包的模板:1.确定dp数组以及下标的含义定义dp[i][j]。2.确定状态转移方程对于每个物品,只有放或者不放两种可能,所以可得出:不放:dp[i][j] = dp[i - 1][j]

2023-09-15 23:37:47 111

原创 动态规划——最长上升子序列模型

最长上升子序列模型类的题目,一般要求我们在一系列数中求出最长的上升或者下降(即反向的上升)子序列,一般时间复杂度为O(n^2),进一步的可以利用二分+贪心维护最长的上升子序列,时间复杂度为O(nlogn)。朴素做法一般为两层循环,第一层枚举 i 从1到n,第二层枚举 j 从1到 i ,每次枚举比较当前点 i 是否比前面的某个点 j 大,如果是则根据状态转移方程f[i] = max(f[i], f[j] + 1)更新最长上升子序列的个数或者和(将+1改为+w[i]),最后得出答案。

2023-09-14 13:56:56 69

原创 动态规划——数字三角形模型

首篇先了解一下什么是动态规划,动态规划(Dynamic Programming)俗称dp,是一种解决多阶段决策问题的优化方法。它通过将问题分解为多个重叠子问题,并利用子问题的解来构建原问题的解。动态规划算法通常用于具有重复子问题的优化问题。Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。

2023-09-12 21:24:22 350

原创 leetcode第362场周赛补题

思路:可惜我没有超级大脑。

2023-09-12 10:59:45 200

原创 leetcode第361场周赛补题

思路:枚举,rfind()思路:转化为字符串后枚举。

2023-09-04 21:58:37 254

原创 leetcode第359场周赛补题

思路:同向双指针+哈希。

2023-08-21 12:34:06 400

原创 力扣第357场周赛补题

思路:多源bfs+倒序枚举+并查集。

2023-08-07 13:54:09 282

原创 力扣第356场周赛补题

思路:3个字符串也就6种情况,枚举即可,比赛时想复杂了。

2023-07-31 14:49:30 256

原创 leetcode第355场周赛补题

思路:贪心,从后往前模拟。

2023-07-24 21:55:33 144

原创 leetcode第354场周赛补题

【代码】leetcode第354场周赛补题。

2023-07-16 20:00:05 354

原创 leetcode第353场周赛补题

【代码】leetcode第353场周赛补题。

2023-07-11 13:34:52 191

原创 leetcode第352场周赛补题

思路:用multiset来维护滑动窗口,比赛中没想到,自己暴力+剪枝过不了最后几个。思路:线性筛质数预处理出n以内的质数,然后双指针模拟。思路:枚举,计算不平衡贡献值。

2023-07-04 16:45:31 270

原创 leetcode周赛补题 6.25

思路:枚举,将题目转化为求num1 - num2 * k 能否拆成k个2的i次方,其中__builtin_popcountll()是用来求该数字在二进制形式下1的个数的库函数。思路:划分的方式其实只能在两个1中间选择,我们将每两个1之间的距离求出来就可以得出可以划分的空,然后乘法。思路:dp,f[i, j, k]三维分别表示前i个字符串,首字母以及尾字母,意义是长度的最小值。思路:排序后用哈希+双指针,维护当前收到了信息的服务器的数量。思路:贪心,找规律推公式。第107场双周赛补题。原理累乘起来就是答案。

2023-06-27 13:31:26 474

原创 二分查找另一种写法的补充

二刷

2023-02-22 22:09:31 180 3

原创 acwing基础课——快速幂

acwing基础课二刷

2023-01-23 15:45:02 1027

原创 acwing基础课——欧拉函数

acwing基础课二刷

2023-01-20 17:56:29 1768

原创 acwing基础课——约数

acwing基础课二刷

2023-01-14 11:59:52 934

原创 acwing基础课——质数

acwing基础课二刷

2023-01-05 23:56:16 509 1

原创 acwing基础课——二分图

acwing基础课二刷

2022-12-23 14:55:08 920 2

原创 acwing基础课——Kruskal

acwing基础课二刷

2022-12-16 18:25:47 146 2

原创 acwing基础课——Prim

acwing基础课二刷

2022-12-16 17:02:32 200 2

原创 acwing基础课——Floyd

acwing基础课二刷

2022-12-12 18:11:20 394

原创 acwing基础课——spfa

acwing基础课二刷

2022-12-11 16:19:17 623

原创 acwing基础课——bellman-ford

acwing基础课二刷

2022-12-11 15:39:18 516

原创 acwing基础课——Dijkstra

acwing基础课二刷

2022-12-06 21:11:52 997

原创 acwing基础课——拓扑排序

acwing基础课二刷

2022-12-05 18:02:20 324

原创 acwing基础课——BFS

acwing基础课二刷

2022-12-01 13:54:09 256

原创 acwing基础课——DFS

acwing基础课二刷

2022-11-30 19:58:57 497

原创 acwing基础课——哈希表

acwing基础课二刷

2022-11-28 20:27:23 224

原创 acwing基础课——堆

acwing基础课二刷

2022-11-28 00:02:33 598

原创 leetcode第 321 场周赛补题

leetcode第 321 场周赛补题

2022-11-27 13:44:23 237

原创 acwing基础课——并查集

acwing基础课二刷

2022-11-26 23:53:21 1383 1

空空如也

空空如也

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

TA关注的人

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