- 博客(26)
- 收藏
- 关注
原创 力扣316去除重复字母-单调栈
d入栈,c要入栈,c已经在栈中了(关键点2,需为在栈中的字符设置标记),所以跳过这个c,b入栈,发现b比栈顶小,但是后面已经没有d了,所以栈顶元素d不能出栈,然后c同样,栈已经存在,跳过。如果栈顶元素比他大呢,我们是否要将他去掉吗,不,如果待搜索的字母中(还未入栈)不包括栈顶元素,那么他是不应该被删掉的,在这种情况,我们就得知道栈顶元素的字母后续是否会出现,,所以去掉a,然后b入栈,a入栈的时候发现a比b小,且b后面还有出现,所以b出栈,然后c入栈,得到最终答案acdb。
2025-04-07 20:08:02
335
原创 redis实现分布式锁
不过使用lua脚本实现分布式锁是更好的选择,因为下文这把锁在判断锁是不是自己的和删除锁的操作不是原子的。UUID作为静态变量,在类加载时生成,也就是服务器启动时,这样不同的JVM下就是不同的UUID。用UUID+线程id作为value,保证每个线程的value唯一,用于后续删除锁前的判断。通过SET key value NX EX seconds操作实现分布式锁。删除锁的时候,判断锁是否是自己的,即通过UUID加线程ID判断。用业务ID作为key:保证一个业务操作一把锁。
2025-03-24 19:10:31
126
原创 一个简单的拦截器实现登录拦截
当携带了cookie,我们可以发送请求成功,并且成功按照拦截器的逻辑打印出了cookie。拦截登录验证比较可靠的刻意使用jwt令牌,redis+token等方式实现。首先我们需要设置一个拦截器,记得注册为bean,并且设置拦截器配置类。我们这里的拦截逻辑比较简单,就是在请求头中加入cookie,然后我们通过postman模拟发送请求。如果可以帮到你,快去动手试试吧ovo。这种方法不安全,只是为了方便演示。当我们不携带cookie。我们可以看到成功拦截。
2025-03-23 12:17:34
147
原创 力扣322
选择了加入,在加入n个这个硬币的决策下可以产生很多选择,最好的选择是dp[i-val]+1,其中dp[i-val]是最多加入n-1这个硬币(可能一个都没加)的最好选择,当我们对某个硬币(数值val)的加入进行决策时,可以产生很多方案,这些方案无非分为两种,加入了,没加入,如果不选择加入,那么此刻dp[i]=dp[i]最后拿dp[i-val]+1和dp[i] 做比较,就是对这个硬币的加入做出决策后的最好选择。如果没有任何一种硬币组合能组成总金额,返回。,表示不同面额的硬币;你可以认为每种硬币的数量是无限的。
2025-03-20 20:50:45
216
原创 力扣416动态规划题目
这也就是滚动数组优化的理由,然后你还可以发现我在枚举3的时候形成了dp[4],我不会拿新形成的dp[4]再加上3取形成dp[7](由1 ,3,3)形成,为什么我不会这么做,因为3只能取一次,但你如果使用了滚动数组(自我滚动,在这道题中体现为dp是一维的)不这么做,程序不一定会, 如果你把我的代码的for(int j=target;枚举3的时候,发现dp[1]存在,那么dp[4]存在,dp[2]存,在, 那么dp[5]存在,dp[3]存在,那么dp[6]存在。dp[0]存在,那么把2加入dp[2]存在。
2025-03-20 20:29:26
188
原创 01背包个人理解(解析)
有 N件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围输入样例8。
2025-03-20 14:39:37
392
原创 并查集基础题:
什么时候连接两个点的边会使得集合成环,那就是两个点已经有通路了,如果两个点没有通路,那么这个边时第一个使得他俩相连的边,那么不可能成环,题目翻译后,就是一道基础的并查集题目了。翻译一下题目:找出第一条使集合成环的边,
2025-03-18 17:21:26
104
原创 洛谷4017题-最大食物链计数
那么为什么可以使用拓扑排序,是因为我们在处理某个点的path的时候,已经把他的前驱都计算好了,在计算2时,1处理好了,他的结果是正确的,在计算3时,2处理好了,在计算4时,3处理好了,在计算5时,2,3,4处理好了,队列对于每个点的处理,都是建立在食物链的流动方向上的。(这里的“最大食物链”,指的是**生物学意义上的食物链**,即**最左端是不会捕食其他生物的生产者,最右端是不会被其他生物捕食的消费者**。第一行,两个正整数 $n、m$,表示生物种类 $n$ 和吃与被吃的关系数 $m$。
2025-03-18 15:49:44
239
原创 一道dfs模板题两种做法,初学者必看,了解dfs出错原因
如A98,是要去处理当前参数节点,那么在进入dfs就得先处理好标记以及添加操作,判断是否完成目标,完成目标则处理并且回溯,否则,列举他能到达的节点,条件成立对其dfs,我们不需要对其先处理,因为我们此时的dfs是处理当前参数节点,对他的处理应该在dfs的头和尾。为什么A98P2在达到终点时不用回溯,因为回溯是在dfs之外的,为什么A98达到终点需要回溯,因为回溯是在dfs之内的,你return后面代码无法执行他就无法回溯了,输出所有的可达路径,每条路径独占一行,存在多条路径,路径输出的顺序可任意。
2025-03-16 11:59:41
296
原创 2017蓝桥杯C合根植物
w 星球的一个种植园,被分成 $m \times n$ 个小格子(东西方向 $m$ 行,南北方向 $n$ 列)。接下来 $k$ 行,每行两个整数 $a$,$b$,表示编号为 $a$ 的小格子和编号为 $b$ 的小格子合根了。第一行,两个整数 $m$,$n$,用空格分开,表示格子的行数、列数($1<m,n<1000$)。接下来一行,一个整数 $k$,表示下面还有 $k$ 行数据 $(0<k<10^5)$。蓝桥杯 2017 年第八届国赛。格子的编号一行一行,从上到下,从左到右编号。## 输入输出样例 #1。
2025-03-14 17:09:12
307
原创 图论-拓扑排序-力扣207课程表
总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。在选修某些课程之前需要一些先修课程。请你判断是否可能完成所有课程的学习?,表示如果要学习课程。
2025-03-13 18:12:00
117
原创 力扣239困难题滑动窗口最大值-单调队列解法
比如 -3 -1 2 1,....,k=4我们把-3加进来,-1加进来,和-3比较,他比-3大,那么-3不可能是最大值了,踢出去,把-1加进去,把2加进来发现-1比他小,-1不可能是最大值了,踢出去,把2加进来,然后1比2小,那么把1加进。那样的话我们需要遍历n-k+1个窗口,对于每个窗口需要遍历K个元素,需要(n-k+1)*k次操作,时间复杂度约为O(nk),最差的时间复杂度接近为O(n^2)来,这样队列就是 2 1,刚好遍历到第四个数了,形成了窗口,最大值就是队头2了,
2025-03-12 21:55:07
122
原创 力扣74搜索二维矩阵-二分基础题
给你一个满足下述两条属性的m x n给你一个整数target,如果target在矩阵中,返回true;否则,返回false。truefalse如果把数组排列成一维,那么问题很好解决所以我们直接把他看成一维数组,然后二分搜索,x=一维的下标/列数,y=一维的下标/行数,画图即可看出。
2025-03-12 18:36:46
243
原创 洪水填充问题-dfs与bfs实现
洪水填充从一个点位向邻居点位扩散,然后再扩散到邻居的邻居,实际是一个寻找连通块的过程洪水填充过程符合BFS原理,但用DFS实现更容易如果用DFS,我们知道他会一条路走到底然后再回溯,这样我们就可以再一开始设置变量,来记录遍历的连通块的数量,并且记录这块连通块的数量伪代码对于起点,再主函数调用DFS(起点x坐标,起点y坐标)函数实现:牢记;DFS的一条路走到底,回溯走其他路,我们只要维护一个变量,这样我们可以遍历所有点,DFS(x,y){将x,y标记res++for(){//枚举四周的点。
2025-03-11 16:32:23
228
原创 学习搜索第四天---一道简单的bfs搜索问题
847. 图中点的层次给定一个 nn 个点 mm 条边的有向图,图中可能存在重边和自环。所有边的长度都是 11,点的编号为 1∼n1∼n。请你求出 11 号点到 nn 号点的最短距离,如果从 11 号点无法走到 nn 号点,输出 −1−1。
2025-03-10 19:39:18
179
原创 剪枝的应用-BFS剪枝-poj3278-可行性剪枝
DescriptionFarmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has
2025-03-09 15:50:51
652
原创 DFS例题-填涂颜色
由数字 0 组成的方阵中,有一任意形状的由数字 1 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 2。例如:6×6 的方阵(n=6),涂色前和涂色后的方阵如下:如果从某个 0 出发,只向上下左右 4 个方向移动且仅经过其他 0 的情况下,无法到达方阵的边界,就认为这个 0。闭合圈不一定是环形的,可以是任意形状,但保证的 0 是连通的(两两之间可以相互到达)。
2025-03-09 13:19:24
234
2
原创 八数码问题-BFS宽度优先搜索
在一个 3×3 的网格中,1∼8 这 8 个数字和一个x恰好不重不漏地分布在这 3×3的网格中。在游戏过程中,可以把x与其上、下、左、右四个方向之一的数字交换(如果存在)。例如,示例中图形就可以通过让x先后与右、下、右三个方向的数字交换成功得到正确排列。现在,给你一个初始网格,请你求出得到正确排列至少需要进行多少次交换。
2025-03-08 16:14:15
857
原创 【无标题】
目前学了:javase,mysql基础,ssm,苍穹外卖,基础算法和数据结构。现在是2025.3.8,13:37,此刻在图书馆学习bfs,还有三年半毕业,此贴为证:三年后我要进字节。正在学redis,搜索.
2025-03-08 13:41:00
61
原创 单调队列应用—滑动窗口-acwing154
给定一个大小为 n≤106n≤106 的数组。有一个大小为 kk 的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到 kk 个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为,kk 为 33。你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。
2025-03-06 15:20:23
262
原创 2017蓝桥杯省赛分巧克力详解
当我们获得的边长更大,意味着巧克力更少,在巧克力边长的数轴上,随着边长在增长,巧克力数量变少,当巧克力小于小朋友个数的时候,就不满足了,因此我们要查找的是check(x)>=k满足时的x的最大值 k把数轴一分为2(由此自然想到二分),左边是满足,右边是不满足,我们要找的就是满足的右端点,因此我们查找的方向是向右(满足时向右边查找),最终找到答案。//边长从左到右变大,我们要的是能满足分配给小朋友的边长最大值,也就是我们要找的是该性质的右端。//二分的是使巧克力满足小朋友需求的最大值。
2025-03-05 16:56:04
267
1
原创 【无标题】
我是一个准大一学生,学习编程是为了多一项技能,打算通过学习理论知识,多打代码,多实践操作来提升编程能力,打算每周学习20小时左右,想加入腾讯公司。
2024-07-12 20:37:26
78
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人