- 博客(73)
- 收藏
- 关注
原创 跳跃游戏两则
举个例子,有nums = [2,3,1,1,4],初始我们在nums[0] = 2处,此时我们在该位置跳一次最远可以跳到nums[2],next更新为2。初始我们的cur也为0(cur == i),说明我们现在所在的位置是我们在上个位置能跳到的最远的下标,ans++,并更新cur = 2,意思是我们在目前位置i = 0处能跳到的最远下标为i = 2。当我们枚举i = 2的位置,前面操作同理,但是i = 2是我们在当前位置i = 0能跳到的最远位置,所以我们可以跳到该位置,然后更新cur = next。
2025-02-25 16:46:02
334
原创 逻辑运算短路现象记录
在这道题中,首先要做的是去重,很容易想到的一种去重方法是,将原数组进行排列后,如果数组的第一个元素还是大于0的,则这个数组不会有这样的一个三元组,它们的和为0。第二种去重是要注意这种情况[a, a, ...], 如果本轮a和上轮a相同,那么找到的b,c也是相同的,所以去重a。,这是一个非法的数组访问,会导致数组越界错误(例如在 C/C++ 中可能触发运行时错误,如段错误)。的判断失败(例如数组越界导致程序崩溃)时,后面的。这里就涉及到了逻辑运算中的短路现象:当。
2025-02-04 18:12:24
184
原创 Spring MVC - Controller的创建与使用
可以发现,我们之前的控制器类方法中都有一个参数Model对象,放入Model对象的数据是请求范围的数据,默认跳转页面是以请求转发的形式跳转页面。可以直接加一个HttpSession类型的参数,用于获取当前会话对象,以操作当前会话对象。
2024-01-02 17:48:39
1966
原创 创建和配置Spring MVC框架构建Web应用
基于xml配置的项目结构图如下:可以发现,关于spring、spring mvc的配置文件统一放到src/main/resources/config下,web.xml放到src/main/webapp/WEB-INF下。src/main/java/com/qdu主要放controller包和service包。src/main/webapp下放网络的静态资源(src/main/webapp/static),src/main/webapp/WEB-INF放的除了web.xml还有jsp页面。
2023-12-27 13:52:59
1266
原创 三种方法实现依赖注入
但是 byType 的自动装配存在一个很严重的问题,因为不是通过唯一的 id 来匹配,而是通过类型来匹配,所以容器中不能存在多个相同类型的 bean,否则会抛出NoUniqueBeanDefinitionException异常。注解,则使用反射实现注入。使用@Bean修饰的方法注册一个bean成为spring管理的bean,方法返回的对象成为Spring管理的bean。byName是按照名称自动装配,意思是要注入的属性的属性名和要注入的bean的id或name(别名)相同,即可实现按照名称自动装配。
2023-12-07 15:19:50
4710
原创 理解依赖注入
可通过bean标记的init-method属性指定初始化时要调用的方法可通过bean标记的destroy-method属性指定bean被摧毁前要调用的方法。
2023-12-05 17:53:32
353
原创 Spring 概述
框架,特指为解决一个开放性问题而设计的具有一定约束性的基础架构。在此架构上可以根据具体问题进行扩展和定制,添加更多的组成部分,从而更迅速和方便地构建完整的解决问题方案。框架,是一种可重用的设计,相当于一个半成品或者说模板,让使用者可以遵循框架的设计快速打造一个成品。
2023-12-04 17:50:19
134
原创 剑指 Offer 03. 数组中重复的数字
主要的思想是把每个数交换到与该数相等的索引的位置,即nums[i]==i,第一次遇到这个数就把它交换到与该数相等的数组下标位置,第二次遇到这个数x时有nums[x]==x,此时一定可以得到一个重复数字。如果该数与数组下标不等,但是相等的数组下标位置所存的数已经满足nums[i]==i,此时这个数就是一个重复的数,直接return nums[i]与数组下标相等,即nums[i]==i,则跳过下列判断并继续枚举。否则就把这个数交换到与该数相等的数组下标的位置。假设遍历到了nums[i]这个数,如果这个数。
2023-01-07 11:26:08
126
原创 KMP算法
这个算法我从2018-02-11在清北学堂的课上学了第1次,后在大二的数据结构课上学了第2次,然后又到现在学习了第3次,最终觉得自己理解了这个算法这个算法的核心思想就是:每次失配后,我们并不是像暴力算法那样只前进一格,而是前进到这样一个位置:设在当前位置下部分匹配的字符串为A,我们将P串移动到仍然和这个A部分匹配的位置为什么要移动到这个位置呢?我们可以思考一下,往前移动会出现这样几种情况:1.一点也不匹配,即P串的第一个位置和S就不匹配,这样的移动无疑是浪费,应该跳过2.部分匹配,但是匹
2021-05-25 21:35:52
187
原创 区间贪心
问题1:数轴上有n个开区间(ai, bi)。选择尽量多个区间,使得这些区间两两没有公共点。策略:如果x区间完全包含了y区间,那么我们选择y区间按照右端点bi从小到大排序,从第一个区间开始选如果目前的区间与上一个区间有相交的部分,则排除掉(排除掉即该区间不再存在,而不z是不选择这样简单舍弃)简单来说就是:一定选择第一个区间,每次选区间的时候选择和上一个被选上的区间不相交的区间思路:首先对于x完全包含了y的情况,如下图所示,小区间为y,大区间为x那么我们选择y区间,因..
2021-04-25 17:06:32
352
原创 洛谷P5788 【模板】单调栈
题意:找到每个数后面第一个大于它的元素的下标可以比喻成站了一队人,每个人向右看,求他们每个人看到的第一个人的位置顾名思义,单调栈就是栈内元素具有单调性,其维护的就是一个数前/后第一个大于/小于他的数我们将输入的数列a[]倒着遍历一下(要找每个数后面的第一个比它大的数,从后向前入栈可以实现),入栈的第一个数也就是数列的最后一个,它的对应函数值一定为0。倒数第二个入栈,和栈顶元素即它后面元素(即最后一个元素)相比,若比它大,栈顶元素就出栈,否则这个倒数第二个元素就正常入栈......有一个问题是
2021-01-27 14:55:30
278
原创 扩展欧几里得算法
首先了解一下欧几里得算法,即辗转相除法如果我们要求1997和615两个数的最大公约数1997 / 615 = 3 ...... 152615 / 152 = 4 ...... 7152 / 7 = 21 ...... 57 / 5 = 1 ...... 25 / 2 = 2 ...... 12 / 1 = 2 ...... 0以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。(摘自百度百科)设a
2021-01-23 21:16:13
461
原创 数据结构课实验习题--中缀表达式转换为后缀表达式并求值
所谓中缀表达式与后缀表达式的定义,即是看运算符在操作数的位置如何中缀表达式即作符是以中缀形式处于操作数的中间(例:3 + 4)后缀表达式(也叫逆波兰表达式)则为3 4 +以下摘抄百度百科:一个表达式E的后缀形式可以如下定义:(1)如果E是一个变量或常量,则E的后缀式是E本身。(2)如果E是E1 op E2形式的表达式,这里op是任何二元操作符,则E的后缀式为E1'E2' op,这里E1'和E2'分别为E1和E2的后缀式。(3)如果E是(E1)形式的表达式,则E1的后缀式就是E的后
2020-11-27 19:25:55
3894
原创 数据结构第三章栈和队列
栈和队列是两种重要的线性结构,也是线性表,是操作受限的线性表;从数据类型的角度看,他们是和线性表不相同的抽象数据类型栈限定仅在表尾进行插入或删除操作的线性表表尾称为栈顶,表头称为栈底,退栈的第一个元素为栈顶元素,故称为后进先出的线性表顺序栈:用顺序表实现的栈1.定义#define MAXSIZE 100typedef struct{ SElemType *top; SElemType *base; int stacksize;}SqStack;2.初
2020-11-25 22:58:14
347
原创 写在前面
一个巨弱都不好意思说是退役OIer的博客原高中临清一中最喜欢和同学翘课去机房现在在QDU挣扎着想打acm(想peach)欢迎骚扰:QQ:1140312750Mail:jmxwzy0510@163.com现在目标:把Pat乙级做完博客目前会写一些pat乙级题目的题解,还有少量的noip时期的题解,还有一些在https://www.luogu.com.cn/blog/w...
2020-05-05 22:47:50
182
原创 PAT乙级1030
尺取法尺取法通常是指对数组保存一对下表(起点,终点),然后根据实际情况交替推进两个端点直接得出答案的方法,这种操作很像是尺蠖(日文中称为尺取虫)爬行的方式故得名。(以上文字摘自挑战程序设计竞赛第2版)Codeforces中显示它的算法名称叫做"two pointers". 直译成中文的话叫双指针法. 怎么说呢……做到提高组之后,很多oier仅仅是觉得好像有这么一个两个指针从左到右扫一遍...
2020-04-26 14:42:52
192
原创 PAT乙级1031
照题目意思模拟即可两种通不过的情况:1.前17位出现不合法字符,遇到后直接退出2.前十七位加和对11取模后的值与表中不符一个小细节以上两种情况不能用if并列,而是if(有不合法字符)......else{if(取模后的值不相等)}否则测试点2答案错误#include <iostream>#include <cstdio>#include <...
2020-04-26 14:10:08
139
原创 PAT乙级1029
先把所有的小写字母转换为大写字母,对于b串每个字符打上标记,然后遍历a串,如果某个字符在b中未被标记就输出,然后把这个字符打上标记,以免后面重复输出#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;...
2020-02-09 20:16:29
143
原创 PAT乙级1028
开始我想的比较麻烦,比如统计有效生日年数,我先判断是不是有效年份,需要分成>1814和==1814的情况,如果==1814,还要再根据月份分情况,分出了>9和==9的情况。。。后面找最年轻和最年长的人也麻烦,我先把所有人从小到大排序,以找最年轻的人为例,枚举p数组,分出==1814和>1814的情况,然后就和上面一样一直分情况。。。结果只有13分后来百度了一下,发现结构体是可...
2020-02-06 21:24:50
220
原创 PAT乙级1027
把输出的图形看成三个部分,假设上部分和下部分分别有t层,则t=3+5+7+9+......,是个等差数列求和,算出来是t^2+2t,乘以2再加上中部分的1个,整理出来总个数就是2*t*t+4*1,用输入的数n减去即可以输出上部分图形为例,每层先输出空格,以题目给的样例为例,t=2,上部分应该倒着输出,所以第2行有0个空格,第一行有1个空格,第i行有t-i个空格;每行有2*i+1个*,下部分正序...
2020-02-05 18:56:10
281
原创 PAT乙级1026
四舍五入:把这个数+0.5再向下取整注意结果小于10的情况#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>using namespace std;int main(){ doubl...
2020-01-31 15:56:07
192
原创 PAT乙级1023
第一位数一定不是0,是比0大一点的数,有一输出一 ,没一输出二,所以先从1开始枚举,有哪个数先输出哪个数,然后立刻退出,然后从小到大枚举,按照每个数有多少个依次输出即可#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using names...
2020-01-31 13:43:16
188
原创 PAT乙级1022
注意特判0的情况,否则第三个点会WA(为什么例一中明明有4个余数,k数组里存里5个??)https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344#include <iostream>#include <cstdio>#include <cstring&g...
2020-01-30 20:07:15
194
原创 PAT乙级1021
b数组存储每个数出现的数,直接从0到9枚举出现了就输出,避免判重#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int main(){ string s; cin>>s;...
2020-01-30 19:37:15
116
原创 PAT乙级1019
太骚的东西不能用,,本来我想用vector来存储每一位数,主要是看中它有个clear的功能,后来想了想确实没有必要,只有四位数,每次直接单点暴力修改即可。如果没有思路可以先只模拟第一次,后续的写法和第一次近乎相同,就是放在循环里输出时如果有格式要求尽量使用printf,比cout好用#include <iostream>#include <cstdio>#in...
2020-01-29 18:55:37
264
原创 PAT乙级1018
暴力统计,暴力判断#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char x[100001],y[100001];int main(){ int n; cin>>n; i...
2020-01-29 16:56:04
150
原创 PAT乙级1017
高精除以单精首先要考虑被除数的第一个数,如果它除以除数不是零而且被除数不只是一位,就先输出,这样就可以处理到底是只用第一位就可以除还是一二项结合才能除的情况然后从第二项开始,模拟除法的过程。假设就从第二项开始,以样例一为例子,经过上述操作后q=1,r=5,然后把3落下来,计算53除以7.......商的每一项是上一项除完后的余数*10加上这一项的被除数去除以b,余数的这一项就是前面说的那一...
2020-01-28 20:49:13
228
原创 PAT乙级1016
模拟,找出这个数在数字里的个数(以下代码在sublime text3无法通过样例1,但是AC,在洛谷IDE里也可以通过样例,比较玄学)#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>usi...
2020-01-27 20:12:04
99
原创 PAT乙级1015
录取四种学生:才德全尽,德胜才,才德兼亡但德胜才,过线的开了四个容器分别将符合条件的学生压入相应的容器,再sort一下即可注意id是升序c++用endl换行会超时#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include &l...
2020-01-27 19:45:05
207
原创 PAT乙级1014
根据题意模拟注意枚举的长度要按二者最短的长度枚举#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int main(){ string s1,s2,s3,s4; cin>&g...
2020-01-26 21:22:37
185
原创 PAT乙级1013
先把素数筛出来,然后在输入的范围内枚举输出即可主要是筛素数枚举的范围,主要是第10000个素数有多大,搜了一下是104729,否则一直会是19分#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>...
2020-01-17 19:16:31
120
原创 PAT乙级1011
开long long,if判断,定义个计数器#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int main(){ int T; cin>>T; long long i=0;...
2020-01-16 20:15:57
136
原创 PAT乙级1010
这个题的输入和上个题目一样循环输入即可,我感觉我这种写法主要是空格的输出需要要想一下,定义一个flag初值为0,输出第一项的系数和指数后将值置为1,当了输出第二项前会先判断flag的值来输出空格,零多项式另外判断一下即可,就是输入后flag值没变一直为0#include <iostream>#include <cstdio>#include <cstring...
2020-01-16 20:05:56
139
原创 PAT乙级1009
把每个单词以字符串形式压入栈中,然后每次输出栈顶元素即可(先入后出)#include <iostream>#include <cstdio>#include <stack>#include <cstring>#include <algorithm>using namespace std;int main(){ ...
2020-01-16 15:56:38
210
原创 PAT乙级1008
定义了一个b数组为答案数组,先存储因为前面的数后移而要到前面去的数,这些数有m%n个,所以在输入n,m后有一个坑点就是不保证n>m,如果没有m%=n这一句,第二第三个点会WA,然后在将a数组的数从b[k]开始导入进b数组#include<iostream>#include<cstdio>#include<cmath>#include<cs...
2019-12-31 20:22:20
164
原创 PAT乙级1007
先打素数表,然后枚举这个表找出符合条件的情况关于素数表的实现,我一开始想的是枚举2-n的每个数,然后对于枚举的每个数i,如果存在小于sqrt(i)的因数就把这个数打上标记,再枚举一遍找出没打标记的数存入a数组中,不过不知道是不是我写的不对,flag标记数组会给每个数都打标记,,然后我又想了想,可以这样做:枚举过程一样,不用flag数组,对于每个不超过n的数,如果枚举因数 j 时 j 的值超...
2019-12-27 13:53:05
175
原创 PAT乙级1006
先得出输入的数的位数,题目保证位数<4,然后分情况讨论,比如如果这个数是三位,那么B的数量就是百位上的那个数,S就是十位上的那个数,个位一个循环搞定#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;i...
2019-12-20 14:47:07
195
原创 PAT乙级1005
定义了一个flag数组判断这个数是否被覆盖,若被覆盖就标记2,对于a数组中的每一个数,如果flag值为2就不必进行猜想的验证操作,否则就进行验证,将每一次的操作得出来的数flag赋值2,然后统计未被覆盖数(即flag=1)的数量,排序后输出即可#include<iostream>#include<cstdio>#include<cstring>#in...
2019-12-20 14:27:29
251
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人