自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 1574. 删除最短的子数组使剩余数组有序(双指针)

具体做法:枚举左端点left,移动右端点right,直至arr[left]>=arr[right],可以删除[left + 1,right - 1]这一段。arr[left]>=arr[right],则arr[0,left]>=arr[right,n]。arr[0,right-1]可能存在以arr[0]为起点的非递减的一段序列L,与后面非递减序列[i,n](i>=right)R,L+R拼接起来依然有序。所以枚举左端点left,找出右端点right,删掉[left+1,right-1]中间这一段。

2023-03-25 19:16:22 218

原创 字符的解码和编码

【代码】字符的解码和编码。

2023-03-23 17:31:16 169

原创 javaweb过滤器Filter

javaweb过滤器Filter

2023-03-23 17:28:17 173

原创 JDBC使用

【代码】JDBC使用。

2023-03-23 17:28:12 106

原创 Request

getParameter(String name)Map<String,String[]> getParameterMap()

2023-03-23 17:27:29 35

原创 Response

代码实现1:设置状态码和响应头location简单的代码实现:sendRedirect(url)注意:在获取输出流之前,先设置编码,防止中文乱码。

2023-03-23 17:26:54 40

原创 ServletContext对象的获取,获取MIME类型,获取文件的真实路径(服务器),文件下载

中文文件名称乱码问题。

2023-03-23 17:22:55 227

原创 剑指 Offer II 082. 含有重复元素集合的组合

剑指Offer II 082.含有重复元素集合的组合思路:递归+回溯

2023-03-23 17:01:16 62

原创 LeetCode 1625. 执行操作后字典序最小的字符串

解题思路:可以发现轮转的次数与累加这两个操作是独立的,轮转的次数并不会影响累加的结果。

2023-03-21 21:08:08 39

原创 Redis-缓存穿透、缓存雪崩、缓存击穿

缓存空对象- 布隆过滤。

2023-03-20 15:59:37 50

原创 Redis-实现秒杀功能

优化一:乐观锁解决库存超卖问题在高并发的情况是会出现库存超卖问题的,解决方案一:用乐观锁。乐观锁解决方案:版本号法CAS(CompareAndSwap)法:比较并交换代码实现:在扣减库存的时候判断此时库存是否大于0。优化二:使用悲观锁实现“一人一单”通过synchronized来给每一个用户的id加锁优化三:Redis分布式锁实现“一人一单“,解决多台服务器上分布sychronize锁不一致的问题核心代码实现:利用设置键的同时设置它的过期时间(这样时间一到这个键也就失效了),中

2023-03-20 15:58:55 517

原创 基于redis实现短信登录

【代码】基于redis实现短信登录。

2023-03-20 15:58:27 72

原创 Redis实现全局唯一ID

【代码】Redis实现全局唯一ID。

2023-03-20 15:57:57 107

原创 剑指 Offer II 057. 值和下标之差都在给定的范围内

值和下标之差在指定范围内 —— 滑动窗口

2022-12-29 21:10:50 61

原创 剑指 Offer II 091. 粉刷房子

动态规划 - 粉刷房子

2022-12-28 17:04:35 139

原创 背包问题求具体分案

12. 背包问题求具体方案题意:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求出最大价值和字典序最小的方案。思路:这道题的一个妙处就是,在循环物品总数的时候反着循环(n~1),这样最后最大价值是f[1][m],在求最小字典序方案时就可以从编号1往n枚举了。求最小字典序,从1(字典序最小的地方)开始枚举可能有3种选择:①可选,必选;②不选,必不选;③可选可不选,必选;这样一定可以保证字典序最小。#include<iostream&

2022-12-26 09:55:31 126

原创 0/1背包模型

1、423. 采药(0/1背包模型)#include<iostream>using namespace std;const int N=110;const int M=1010;int v[N],w[N];int f[M];int main(){ int t,m; scanf("%d%d",&t,&m); for(int i=1;i<=m;i++) scanf("%d%d",&v[i],&w[i]); for(int i=1;

2022-12-26 09:53:07 66

原创 剑指 Offer II 071. 按权重生成随机数

剑指 Offer II 071.按权重生成随机数前缀和+二分

2022-12-22 15:13:29 100

原创 小白月赛54 B-Gaming

小白月赛54 B-Gaming

2022-12-20 15:08:17 64

原创 牛客练习赛101 B-荒神在此

牛客练习赛101 B-荒神在此

2022-12-20 15:07:51 83

原创 牛客月赛56 C-阿宁吃粽子 D-阿宁的质数 E-阿宁睡大觉

牛客月赛56 C-阿宁吃粽子 D-阿宁的质数 E-阿宁睡大觉

2022-12-20 15:07:48 115

原创 换根DP 牛客练习赛99

换根DP 牛客练习赛99

2022-12-20 15:06:43 118

原创 2021ccpc女生重现赛 I - 驾驶卡丁车

2021ccpc女生重现赛 I - 驾驶卡丁车

2022-12-20 15:06:17 102

原创 牛客练习赛99

牛客练习赛99B 物流

2022-12-20 15:05:03 34

原创 codeforces round 828 div3

CodeForces Round 828 div3 D

2022-12-20 15:03:17 55

原创 CUC ACM CCPC 2020 女生赛

题意概括:最大价值=所有顶点数-所有边数。每出现一对(x,y)边数加1,可以考虑用并查集,同一集合的根节点保存该集合的总点数,总的边数,最后用总边数-总点数。

2022-12-20 15:01:52 202

原创 牛客小白月赛57 D-最大gcd

牛客小白月赛57 D-最大gcd

2022-12-20 14:59:04 94

原创 剑指 Offer II 087. 复原 IP

剑指Offer II 087.复原IP

2022-12-20 14:57:45 67

原创 剑指 Offer II 096. 字符串交织

动态规划剑指Offer II 096.字符串交织

2022-12-19 12:04:51 108

原创 leetcode 698. 划分为k个相等的子集

这里剪枝的关键点在:如果当前集合元素的和等于前一个集合元素的和,那么对于元素nums[cnt]来说,其选择和前一个集合是一样的,所以可以不用再重复计算了。

2022-09-20 12:04:49 218

原创 牛客小白月赛49 D(数学) E(DP)

题意:思路:看一下这个函数f(x),不难发现它是一条开口向下的抛物线,在[a,b]这个范围f(x)>0,所以要求S(n)-S(m)的最大值,即求区间[a,b]这一部分的累加和,即S(n)-S(m)=S(b)-S(a),我们来列出式子,S(n)-S(m)=-(m-a)(m-b)-(m+1-a)(m+1-b)-...-(n-a)(n-b)=-(m^2-(a+b)m+ab)-((m+1)^2-(a+b)(m+1)+ab)-...-(n^2-(a+b)n+ab)=-(m^2+(m+1)^2+...+n

2022-09-18 14:45:40 126

原创 牛牛的数论

思路:欧拉公式Ψ(x)=x*∏(1-1/pi),所以H(x)=∏(1-1/pi),可以看出乘的项数越多H(x)越小。可以预处理出质数的前缀和mul[i],小于n的最大的一个前缀和就是最小值(这些前缀和的范围肯定是在[2,n]里的,每一个数都可以由质因数分解来表示)对于最大值的话,如果x是质数,则H(x)=(x-1)/x,猜想取最接近x的质数就是答案,所以从n往后找出最大的一个质数即可。#include<bits/stdc++.h>using namespace std;typed..

2022-09-08 17:47:57 47

原创 F 小沙的算数 并查集+逆元

思路:利用并查集将连在一起的乘法的结果存放在根节点,当成一个独立的区间,后面修改值的时候,先用总和sum减去这个值所在的区间s[i],之后用s[i]/a[i]*y就可以得到这个区间新的值,但是由于是边取模边计算的,所以s[i]/a[i]要转换为s[i]*a[i]^--1(用逆元来计算)。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e6+10,mod=1000000007;i

2022-09-08 17:46:30 50

原创 牛客月赛47 D造桥 DP

思路:dp,考虑每个字符串的左右端点,左端点只会是由前边与它相同的右端点字符相连,而右端点ch只需要考虑当前前i个字符串中以ch结尾的最大的长度所以,f[i]可以表示为从前i个字符串中选,能与当前字符相连的情况,和没办法相连时的情况,所能形成的最大长度。#include<bits/stdc++.h>using namespace std;const int N=2e5+10;struct node{ char l,r; int len;}a[N];int ...

2022-09-08 17:44:06 49

原创 树形DP 树的最长路径、树的中心

1072. 树的最长路径1、树的最长路径:树的最长路径又叫树的直径,即这棵树中距离最远的两个结点的距离。2、找树的直径的做法:①任取1点作为起点,找到距离该点最远的一个点u。②再找到距离点u最远的点v。③u和v之间的路径就是树的一个直径。思路:对每个结点,把它能往下走的所有路径枚举一遍,记下最长路径d1和次长路径d2,所以经过这个点的总最长路径长度为=d1+d2。#include<iostream>#include<cstring>using namespac

2022-05-03 11:30:55 422

原创 树形DP+状态机模型

AcWing 285. 没有上司的舞会题意:思路:f[i][0]:表示从以i为根节点的子树中选且不选择i的方案。f[i][1]:表示从以i为根节点的子树中选且包括i的方案。f[i][0]=Σmax(f[j][0],f[j][1]),f[i][1]=Σf[j][0];(j是i的字节点)。#include<iostream>#include<cstring>#include<algorithm>using namespace std;const...

2022-05-03 11:30:28 935

原创 多源BFS AcWing 173. 矩阵距离

题意:思路:将所有位置为1的点全部入队,然后进行BFS,保证每个点只被搜索一次,时间复杂度O(n*m)。在对每个点往外扩的时候,它能够到达的点一定是距当前点最近的,所以一定能够保证每个位置不为1的点到图中位置为1的点的曼哈顿距离最小。#include<iostream>#include<queue>#include<cstring>using namespace std;const int N=1e3+10,INF=0x3f3f3f3f;int .

2022-04-27 18:36:38 103

原创 多源BFS 迷宫

C 迷宫思路:将操作1给出的位置全部入队,在执行操作2的时候,再进行bfs,然后清空队列。这道题的两个注意点:①不要在操作2哪里进行BFS,这样子肯定会超时,所以要反过来想出口可以到达哪些点,在出口哪里往外扩,也可以减少入队的点,降低时间复杂度。②坐标存储,肯定没办法开三维到1e5的,所以想怎么把坐标存下来。于是对于点d(x,y,z)可以转换为一维的 d(x+n*y+n*m*z)。#include<bits/stdc++.h>using namespace std;co

2022-04-27 18:30:30 93

原创 区间DP问题 记录方案

AcWing 479. 加分二叉树题意:思路:对于每棵子树,只要确定了根节点,那么这棵树的值也就确定了。于是,可以来枚举每个区间里根结点的情况来划分出它的左右子树。而每棵子树之间又是相互独立的,于是就想到了区间DP。f[L][R]表示所有中序遍历[L,R]这一段的二叉树的所有方案。假设根节点是k,于是f[L][R]=f[L][K-1]*F[K+1][R]+w[K]]。怎么记录方案数呢?g[L][R]来记录[L,R]这一段的根节点,一旦根节点确定了,就可以知道它的左右子树了,就可以递归下去

2022-04-26 19:27:48 978

原创 区间DP问题

AcWing 1068. 环形石子合并题意:有一排石子,每次将相邻的两堆石子合并,首尾也视作相邻的,求最大和最小的合并价值。思路:将环形的转换为一条水平的链,就是把原来的值复制一份连接到后面就变成了长度为2n的一维数组,然后按“石子合并”来就行了。最后在计算答案的时候枚举右端点,找出长度为n的区间的最大和最小值就可。#include<iostream>#include<cstring>using namespace std;const int N=410,INF=0

2022-04-26 19:23:53 67

空空如也

空空如也

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

TA关注的人

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