自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource could

这里由于我的配置文件也在resource下,但他不是xml文件,所以就不会打包进去,直接废掉。明显是数据源url的问题,查了很久,发现他们说的问题我都写了,这里记录一下我的问题。一般是配置文件里没配置url,但是我看我都配置了,找了好久才发现这个东西。

2023-03-08 17:38:01 129

原创 算法日常训练12.6

看到难度简单,正准备重拳出击,一顿操作猛如虎,提交答案错误乘五。是我想的太简单的,遍历所有的数字,用set去重,保存int,要么边界情况没考虑,要么结果越界了,改成string保存,被前导0弄趴了,提交五六次,看着特殊用例一点点改,成功击败8%,属实牛批。 我丢人现眼的代码先扔一边,看看题解,双指针解决,这个我倒想到了,不过p2-p1>0&&p1==0消除前导0的情况,又保证了只有一个0的情况,只能叹息我太菜了。 本来题目都没咋看懂,在草稿纸上画着画着有点思路,想用动态规划解决,但是是错误代

2022-12-06 16:39:48 321

原创 算法日常训练12.5

首先有个很大的进步,看见困难题我没选择做逃兵跑路,这点起码是进步了,虽然算法能力还是那么拉,但是起码敢不自量力地分析一下。。。还能看题解理解下。这里的dp可以发现是维护一个滑动窗口中的最小值,第一次见,详细分析见 力扣大佬题解 总之就是需要优化每次找最小值的时间,我选择使用优先队列,感觉好理解一点,看了很久,这题有点超出我水平了,溜了,有缘回来再看。经典的搜索题,写了好几遍了

2022-12-05 16:40:21 399

原创 算法日常训练12.4(最接近目标价格甜点成本)

只能说回溯实在是诡异,刚看到这题目思路一点不清晰,想着用回溯想到一点写一点,就这样诡异的出来了。 双指针判断回文串,没啥营养,不过我的水平只能写写这种题。 好消息,这个题目和我以前写过的一个牛转向的问题很像,坏消息,我忘得一干二净,再好消息,找规律硬找出来了,发现和那个牛转向问题应该不一样,因为那个我不会。

2022-12-04 17:27:15 420

原创 算法日常训练12.1

没营养的一天

2022-12-01 11:28:56 65

原创 算法日常训练11.30(895.最大频率栈)

面向答案解释,优先队列用于实现栈的功能,自己自定义比较器,让他实现按频率弹出数据是比较简单的,但是如果有频率相同的数据,那么就要判断谁离栈顶更近,所以这里用index保存离栈顶的位置,还需要一个map来保存数据的次数,因为优先队列不能直接取出某一个数据来,那我们就不知道数据的次数,所以需要一个map保存,优先队列弹出以后map也要更新。困难题,设计数据结构的,写的很少,直接看答案,发现看的懂,就直接看别人的答案学,这个答案是比较简单的,因为用了很多写好的数据结构,我们要做的就是对这些数据结构熟练掌握。

2022-11-30 15:59:58 94

原创 算法日常训练11.29

首先题解的方法,多想到的是变成0101或者1010这种需要的步数加起来是等于字符串的长度的,并且他也不加if(i%2==1)这种傻语句,直接判断‘0’+i%2;奇数位和偶数位显然在01交替进行了,而第三种方法i&1替代了i%2,位与计算,i的最后一位一直是01交替,如果i&1为0,代表是需要为0的位置,那么arr[i]不为‘0’的话,异或以后就为1,正好代表需要变化的位置,被a加上去,如果为‘0’异或他本身就是0,不需要改变,正好加上0,有点巧妙,反正不是我能写出来的,看看差不多。

2022-11-29 17:37:14 147

原创 算法日常训练11.28(813.最大平均值和的分组)

再定义一个j,j看作数组的断点,当k>1时,取dp[j][k-1]+avg(j,i)的最大值,这个值就是新的dp,也就是dp[i][n]=Math.max(dp[i][n],dp[j][n-1]+(sum[i]-sum[j])/(i-j))。怎么看怎么不会,就想的到用回溯之类的,不过想都不用想,超时是肯定的,看一下答案,不就是动态规划的背包问题,以我的脑子确实想不到,还是老老实实学习别人的。当k=1时,dp[i][1]=sum[i]/i;dp[i][k]:前i个数划分为k组的最大平均值和。

2022-11-28 11:41:30 85

原创 算法日常训练11.22(878.第N个神奇数字)

首先如果a和b是倍数关系,那么只需要返回小的那个数的第n个倍数就可以,这个很好理解,如果不是倍数关系,那么就要求出他们的最小公倍数,用a*b/最大公因数,gcd求最大公因数已经用过好几次了,然后用二分法找到第n个倍数,右边界从小的数的第n倍算起,因为存在公倍数,那么他们之间一定不止n个神奇数,然后二分,判断中间数mid在n左边还是右边,怎么计算?用a的倍数个数加上b的倍数再减去他们的公倍数个数,因为一个公倍数算了a的倍数也算了b的倍数,再维护left和right,二分求到第n个神奇数,要注意数值越界问题。

2022-11-22 16:30:13 187

原创 算法日常训练11.21(808.分汤)

这个题目使用的是动态规划,但是由于数据很大,但是发现所有的操作都是25的倍数,那么就可以同时除以25,操作就变成了(4,0)(3,1)(2,2)(1,3),总数也要除以25,为什么这里要向上取整,比如50和51,很明显50只需要分出去2两份,但是51就需要3份,尽管只多了1,但是这1也要占一份的,然后开始dp三部曲。:dp(i,j)=0.25×(dp(i−4,y)+dp(i−3,y−1)+dp(i−2,y−2)+dp(i−1,y−3)),选中前面的每条操作概率都是0.25,所以乘以0.25。

2022-11-21 11:47:03 96

原创 算法日常训练11.20

这种题目第一件事就是不能被吓到,看起来很麻烦,其实就是模拟的事,假设所有的酒都倒在第一杯,然后判断是否有溢出,把溢出的分成两半留到他相邻的两个杯子,当前杯子就是一杯,主要就是用一个数组保存每杯的数量,模拟法偏大,动态规划好像没什么感觉,虽然这里用了dp数组保存当前杯子的酒,下一个dp是用上一个留下来的推出来的,但是还是模拟偏多。位运算不是很熟, cv的代码,看别人的代码很容易理解,注意MIN_VALUE/-1会越界,用位运算>>代替除号,找到一个够大的数,先除以2^i次方,不断算下去。

2022-11-20 12:04:41 84

原创 算法日常训练11.17

有脑子的人真帅,也不知道我什么时候能长脑子。理解一下写起来还是比较简单的,主要理解了queue的作用写起来的时候就得心应手了,queue数组下标代表字母,保存的int[]数组,第一个保存字符串在words的位置,第二个保存当前走到字符串的哪个位置,这样一个queue,又保存了字符串是哪个,位置到哪里以及字符是什么,这样在遍历一次s时就可以把三个值全维护了,就可以实现遍历一次s判断所有字符串了。很神奇的一个题目,最大值就是峰值,想ac直接找最大值就好了,我以为这已经是最好的偷懒方式了,直到看到。

2022-11-17 11:48:02 120

原创 算法日常训练11.16

分析一手,发现局部倒置一定是全局倒置,比如1,0是局部倒置,也是全局倒置,那么这个问题只要保证没有其余的全局倒置就可以了,也就是说不会存在隔一个数还有逆序对的情况,比如2,0,1,除了2,0这个又是局部又是全局的,还有一个2,1这个是全局的,那么就不存在,返回false,解法应该没想错,结果。2.初始化:dp[0][0]=nums[0],dp[1][1]=nums[1],,,i=j时dp[i][j]=nums[i];1.定义dp[n][n]:dp[i][j]表示子数组i-j的最大公因数。

2022-11-16 11:29:24 85

原创 算法日常训练11.15

来个二维数组前缀和的应用,基本就是把上题的代码粘贴过去,但是这里列举了所以矩形的左上角和右下角,用了四层循环,ac是ac了,但是就差那么一点就垮了,毕竟是困难题,纯用前缀和应该是不可能的,这里暴力ac了属于侥幸了。不是第一行和第一列的,利用几何分析,当前位置就是一个大矩形,上面的矩形加下面的,加上当前值,再减当前值,就是该大矩形面积。昨天写到了二维数组前缀和的问题,现在系统复习一下,首先是一维数组,前缀和的作用就是为了方便求区域和。首先初始化,sum[0][0]一定是等于arr[0][0]的,

2022-11-15 11:32:57 89

原创 算法日常训练11.14

竟然不让用api,那么就直接在string上计算,模拟计算过程,注意进位就好了。随机抽选到的简单题就不能怪我了,删去前后导格,直接数最后一个单词长度。简单题,本来想做个api战士的,没想到直接炸了。水平比较拉,写的比较繁琐。

2022-11-14 20:32:15 83

原创 蓝桥杯第十四届javab组模拟赛题

要最小的字符串,因为都是无限的,所以看前面的字符越小越好,所以主要要解决最小的字符相同的情况,只有一个最小字符就可以确定最小的就是,有相同的就要回溯,看他们跳转过去的字符的大小,还一样就一直向下比,但是有完全一样的情况,这样就会栈溢出,这里用个num记着层数省的炸掉,咱也不知道数据大起来会怎样,随便搞一下,饿了。一般比赛后面两个题压根不敢写,看了看题,没啥思路,赶着吃饭,跳过。子矩阵的问题,蓝桥杯上看到好几次,没搞过,这个要系统练习一下。难度不是很理解,可能是我理解错了,不确定,再看看。

2022-11-13 12:08:54 2446 3

原创 ssm框架整合复习(一)

ssm需要很多包和配置,这也是springboot出生的原因,这些包一会冲突,一会版本不支持,属实是烦,先被配置和导包折磨一下,后面学springboot才能感觉有多方便,我常用的包大概就下面这些。还要注意spring这些引入jdbc等配置文件都要说明是classpath,不说明在测试时是正常的,但是发布到tomcat上就有问题了,他就找不到了,需要说明classpath他才会找到。代码后面一定会进行更改,这里只是列举主要的配置,主要用于自己复习,对搭建ssm项目有大致的了解,菜鸟一枚,有问题希望指出。

2022-11-06 15:55:20 172

原创 算法训练11.6

这个问题就需要使用单调栈,维护一个递减的单调栈,到第一个位置就是3时,把位置压入栈中,然后到4时,4大于栈顶位置的元素3,继续把位置压入栈,到1时,1小于4,弹出4的位置,比4小右边的最近元素就是1,左边就看栈顶的元素(因为维护了栈的单调性),也就是3,那么4就是[0,2],1还小于3,弹出3,右边比3小还离他最近的元素也是1,左边看栈顶,没了,就是-1,继续压入1,以此类推。那么位置为0也就是3时就是[-1,2],位置为1也就是4时就是[0,2]。例如:arr=3,4,1,5,6,2,7。

2022-11-06 11:38:01 114

原创 算法日常训练11.4

target等于6时,是3步能走的最远距离,就是1+2+3,发现-1+2+3是4,1-2+3是2,所以这些数可以看成1+2+3中反转一个数,反转1就少了2步,反转2就少了4步,一定是偶数,所以当sum>target时,如果sum-target为偶数,那么sum反转一个数就能得到target,那么就是i步,如果是奇数,就要继续往下走,比如1+2-2=1,那么1+2就不能反转一个数得到2,所以继续看1+2+3。target=4 -1+2 +3 三步。target=2 1-2+3 三步。

2022-11-04 14:41:00 68

原创 算法训练11.1

看了一下评论区,发现别人都是模拟,检查自己的代码,发现如果链表比数组的容量大,那么在外面的while循环就会死循环,加上一个num记录填充的数字个数,问题解决,那么这样模拟是没问题的。螺旋数组,记忆涌上心头,直接维护四个方向,模拟法解决,然后。先附上一下模拟法的代码,只能欺负欺负模拟矩阵I这样的题。新的11月从简单题开始,偷懒拼接比较,没有任何含金量。正好加上昨天的string的理解代码凑凑字数。

2022-11-01 11:29:40 96

原创 问题讨论:关于静态块代码

如图,使用反射加载A类会创建对象,使用new也会,但是如果放一起,静态代码块只执行了一次,为什么?

2022-11-01 10:41:38 39

原创 算法训练10.25

第一反应是使用深搜硬刚,一个深搜不知道怎么解决,就先写一个深搜,把第一个岛标志为访问过,在写一个深搜,搜遍第一个岛的土地,记录这块土地到第二个岛的最短距离,不断搜索, 记录所有的最小值,,,这样深搜,不炸才怪,第二次的深搜还需要回溯,因为一块土地搜索完置为true,第一个岛的下一块土地再搜有可能还要走这条路,第一个岛每块土地都进行深搜,时间复杂度极高,还是记录一下,毕竟辛苦想的。k代表同一列,j也代表同一列,最后的结果需要的是两个部分的最大值,所以可以一次遍历,两个维护,最后就是。现在假如j>=k,那么。

2022-10-25 17:47:02 88

原创 算法日常训练10.23

然后就没然后了,自己想过用双指针,遍历s3在s1和s2中找相同的字符,发现遇到s1,s2中的不知道怎么取,不能随意取,两种情况都试的话应该就需要dfs,估计思路错了,然后想用s3减去s1看看和s2是否匹配,发现还是天真了,还是一样的问题,相同的字符不知道用哪个去减,没有想法,打开评论区,原来又是动态规划。主要保证的是需要交换的数尽量偏左,和他交换的数尽量刚好比他大,这样才可以保证是下一个序列,还有排序,都是为了比他大,但是又要刚好比他大。然后初始化dp,dp[0][0]=true,就是三个都是空的。

2022-10-23 16:33:39 75

原创 算法训练10.21

力扣今天的每日一题,不是很难,难的是理解题目(对的,我就是看不懂题的那个),这里题目出的应该是使用next方法来动态输入数组,相当于直接做了一次遍历,用一个ArrayList保存数组,数组第一个数保存当前股票的价格,第二个数保存这一天的最长连续日数,在遍历到一天后,看他前一天的价格是否比他低,是的话就加上前一天的连续日数,再看是否比这连续天数之前的天数,以此类推(这玩意好像就是动态规划?动态转移公式:只要dp[j]为true,如果j到i的字符串存在字典中,那么dp[i]为true,也就是。

2022-10-21 16:14:38 150

原创 算法日常训练10.17

这里再附上官方的写法,也是滑动数组,复杂度也比较高,但是这种写法的map和我写法的map不一样,这里的map是保存水果的数量,再种类超过2以后,左侧窗口维护,可以理解成一个一个扔出去,知道把一个种类的水果全扔去了,也很好理解。=b[j-1]时,dp[i][j]=dp[i-1][j],这个比较好理解,因为a[i-1]!当a[i-1]==b[j-1],就比较难理解,我这里用了三层循环,为了好理解,当他们相等时,就要找到以他们为结尾的最长递增序列,这里就和最长递增子序列很相似。

2022-10-17 19:50:57 87

原创 整合ssm时controller层扫描不到service层的bean

盲猜能正常运行是因为在代码中使用spring配置文件时加了路径,但是spring配置文件和springmvc文件没有整合成一起。记录一下这个问题,虽然很小,但是希望不要有谁遇到这个问题和我一样浪费大把时间来查,浪费时间。翻遍了csdn没有找到怎么回事,感觉该配置的都配置了,然后看到spring配置文件里有。但是没配置运行是正常的,所以一直都没点后面的配置,就是不能使用自动注入。翻译过来就是没有为该文件配置应用上下文,点后面的配置,问题解决了。

2022-10-16 18:02:08 1417

原创 算法日常训练10.16

属实是菜,这个题目分析了很久,想用dfs解决,却不知道应该怎么解决,后面用两个组来保存每个数,先默认保存在a组,然后遍历这个节点讨厌的节点,然后将它讨厌的节点j放入b组,对j进行搜索,j讨厌的节点再放入a组,以此类推,当一个组里面存在相互讨厌的人就不能进行下去了,深搜的过程要将。并查集可以快速判断两个元素是否在同一个集合中,在这个问题中,如果排斥的两个节点在同一个集合中,那么就可以直接判断。由于并查集很久没用过了,这里先附上并查集的模板写法。,否则当前层都改变了,问题可以解决,但是复杂度比较高。

2022-10-16 17:20:48 54

原创 背包问题复习10.15

可以看出,完全背包和01背包的区别只在于状态转移公式,不选是一样的,但是选的话,由于01背包只能选一次,遍历到当前物品时,选的话就是看遍历到上一个物品时减去当前物品价值的dp值加当前物品价值,而完全背包可以重复选,所以只要当前重量减当前物品重量的dp加上当前物品的值。就是把上面两个问题的二维数组转成一维数组,但是还是要双层循环,但是只要一个dp[j]:保存重量为j的最大价值,遍历物品,同时不断维护j,比如01背包中,由于物品只能选一次,所以。,就可以保证在计算后面的值时,前面都没选,就保证了只选了一次。

2022-10-15 11:46:12 76

原创 算法日常训练10.12

题目废话太多,搞得我一来以为是找最长的组件,然后报错,发现是找组件也就是子链表的数量,于是就在原来的代码上改,发现可以改成记录断点的数量,主要处理第一个断点和最后一个,第一个可以忽略,因为一开始记录组件的长度就是0,最后一个的话就看最后一个是不是断点,因为用了len,就算是相连的断点也直会被记录一次,在排除只有一个元素还是断点的情况,就这样模拟解决了。

2022-10-12 13:53:44 69

原创 算法日常训练10.11

我为什么突然写柠檬水这个问题,就是因为写这个题目直接想当然的贪心去了,想当然的最少硬币数就是从后面开始拿,还能拿就拿,不能拿就拿下一个,明显想法是错误的,因为这个问题不止是拿最少的硬币数,更要刚好凑成这个数,比如10元在[5,8]里面拿,拿了8元就不能凑了,所以这个问题明显不能贪心,而是要动态规划,是一个。很简单的贪心,就三种情况,直接根据常识就能知道找20元时,优先找一张十块和一张五块,因为两张五块能做一张十块,用户更多,直接记录五元十元的数量,遍历就出来了。取第i个硬币或者不取,看看谁更小,以此类推。

2022-10-11 17:11:03 76

原创 spring集合mybatis(动态代理)

刚学ssm,一直使用spring和mybatis集合就是用传统的方法,昨天看到别人写的代码dao层竟然没有实现,都没有使用sqlsession,纳闷了半天,到处查阅才知道原来mybatis和spring整合可以使用动态管理,将底层的逻辑代码交给spring框架来做,简短的记录一下用法。同时,不导入mysql-connector-java也是这个问题,这个应该早点想到的,问题就是数据源的dataSource属性抛出异常,没这个包是找不到驱动的,附上一下所需要的的所有包,导包真的很重要。

2022-10-11 15:09:48 304

原创 算法训练9.29

里面的取模操作需要注意,有时候可以用,但是看看别人写的代码,瞬间就知道自己多蠢了。属实是蠢,混一下打卡题,跑路。不是很难的题,直接附上代码。

2022-09-29 23:59:59 68

原创 算法训练9.28

还是看真动态规划 dp[i]:第i个地方还能往后跳几格,那么dp[i+1],要么就是dp[i]这个位置再往下跳一格到i+1的地方,要么就是更新为nums[i+1],那怕不怕dp[i]为0还继续计算了,怕,所以要加上判断,dp[i]

2022-09-28 23:07:48 62

原创 算法日常训练9.27

n=3时,有81个二位数,都可以拿出来加数,但是因为是二位数,有两个数已经有了,那就只有8个可以拼,就是81*8=648,这648个是三位数,还要加上二位数一位数,就是91种,就这样模拟下去就是答案。1-9可以用来加一个数字变成二位数,但是不能加成11,22这种类型,所以每个数只能加9个,就是81种情况,再加上前面的十种。排列组合忘了,就会硬来,说一下核心思想,n=0时就是只有0;早说过我没脑子,就会套路,这个题是完全没思路,翻看题解,记住核心式子。简单的签到题,第一想法是散列,这里直接偷懒,排序后比较。

2022-09-27 23:48:31 63

原创 算法日常训练9.26

李白喝酒的ab序列,两种情况直接列,就相当于for循环,为什么不用remove,因为用的数组保存,回溯后直接覆盖这一层的前一种情况,走到最后一层再加个验证。只要能理解回溯就是个树状图一点一点往下走,就能很好的解决这种问题,第一个数字代表第一层,然后第二层。走到最后一层,再记录是从第一层来到最后一层的情况,因为要列举每一层的每一个字母,所以用了两层循环,遍历所有情况。用的是普通的dfs,没什么剪枝操作,效率比较低,找到第一个字母开始一层一层往下找,其实就是一种回溯,注意条件的使用很好解决。

2022-09-26 11:15:44 321

原创 算法日常训练9.25

为什么附上排列1的普通回溯方法,没错就是因为排列2不会去重,就会套路,不会思考。和子集1也是加了一个去重,去重和组合2的方法是一样的。附上一下全排列常规回溯写法。

2022-09-25 21:55:59 90

原创 日常算法训练9.24

全排列也是回溯的一种常见题型,也可以用回溯模板来写,用一个used数组标志元素是否使用过,但这种交换的写法更常见,常用于需要检查满足条件的排列。子集的问题区别就在于子集是收集每一个节点的,而不是收集满足条件的叶子节点。

2022-09-25 11:27:28 72

原创 算法日常训练9.23

回溯的题目,常见的有排列,组合,子集,分割,棋盘等,就是将所有的情况都列举出来,加上一些好一点的剪枝操作,套路就是用一个方法然后回溯所有情况,一个一个题目慢慢理解。为什么used为false代表前一层访问过,因为回溯,第一层使用时是标志为true,但当他使用完后,被remove,同时标志为false,使用false代表使用过。这个数组中,在第一层1中已经有了1,2,5这个答案,在第二个1就不需要这个答案,而且第一个1的一层有1,1,6这个答案,所以不用担心第二层的1需要第一层的1。等价于sum+=i;

2022-09-23 16:34:16 114

原创 算法日常训练9.22

今天的题目都没用什么特别的方法,都是中规中矩的,直接用队列层次遍历,让他们指向本层的下一个就好了。课有点多,偷懒,中序遍历,输出第k个数,搞定。简单的dfs,有点生疏了,到时候再巩固。

2022-09-22 17:53:29 58

原创 算法日常训练9.21

中序遍历,使用递归很简单,这里使用迭代的思想,先用一个栈将节点的左节点都压入栈中,在取出一个节点来,将它视为根节点,(因为他的左子树要么为空,要么就是栈中弹出来了已经遍历了),保存他的值,再处理他的右子树,以此类推。这个题目需要好好注意,使用前序和中序构造出树,记住一个思想,先将前序的第一个数取出来,就是根节点,再在中序遍历中找到这个节点,左边的都是他的左子树,右边为右子树,不断这样拆分,直到不能拆分为止。这个很好理解,但是使用指针有点难理解,这里配上链接,有时间去慢慢消化。

2022-09-21 11:32:58 98

空空如也

redisTemplate问题

2023-12-20

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

TA关注的人

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