自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 秋招算法、八股文小灶第一天 | LeetCode 54. 螺旋矩阵、LeetCode 59. 螺旋矩阵 II 、LeetCode 48. 旋转图像、八股文每日一题

要求是旋转,可以看出首先是横纵坐标互换了,尝试将横纵左边互换后发现再将矩阵左右翻转即可得到最后的正确答案。和上一题一样,只不过这一回我们要自己填数组。当然这个过程中要用到一个辅助数组。1、GET和POST请求的区别。常用于对用户密码加密、解密操作。总结来说就是枚举+找规律。3、五层网络体系结构。

2024-07-17 22:23:47 170

原创 项目训练营-智能Bi项目详细模块编写

springboot、 Ai、BI数据分析

2024-07-14 17:33:31 731

原创 算法训练营第七十六天(最后一天、完结撒花) | Bellmanford之单源有限最短路、Floyd算法、A*算法

题目连接:pid=1154在之前的基础上松弛k+1次而不是n+1次即可i < m;i++){// 用来记录上一次遍历的结果i

2024-07-04 23:32:48 371

原创 项目训练营第六天

之前由于不知道改动了什么地方,原本各变量配好的界面给后端发参数时总是丢失,只好重来,于是还是初始界面,但是功能调通,可以给后端发参数了。同时为了避免在注册模块中没有导入该接口函数,复制一份放到Register文件夹下index.tsx文件中。将登录界面文件夹复制一份,粘贴到上一层目录User目录下,改名为Register。直接调用session中的相关方法即可,相当于从map中移除数据来实现相关效果。在typings.d.ts文件中添加如下的登录前端接口函数标准参数。并在routes.ts中添加如下配置。

2024-06-30 01:12:36 293

原创 算法训练营第七十三天 | Bellman_ford算法、SPFA算法、Bellman_ford之判断负权回路

那对所有边松弛三次 可以得到与起点 三条边相连的节点的最短距离,这个时候,我们就能得到到达节点3真正的最短距离,也就是 节点1 -> 节点2 -> 节点5 -> 节点3 这条路线。对所有边松弛一次,相当于计算 起点到达 与起点一条边相连的节点 的最短距离,这里 说的是 一条边相连的节点。而 节点1 -> 节点2 -> 节点5 -> 节点3 这条路线 是 与起点 三条边相连的路线了。与起点(节点1)一条边相邻的节点,到达节点2 最短距离是 1,到达节点3 最短距离是5。

2024-06-30 00:43:11 445

原创 算法训练营第七十二天 | dijkstra(朴素版)、dijkstra(堆优化版)精讲

【代码】算法训练营第七十二天 | dijkstra(朴素版)、dijkstra(堆优化版)精讲。

2024-06-28 00:11:15 252

原创 算法训练营第七十天 | 最小生成树之prim、最小生成树之Kruskal、拓扑排序

题目链接:https://kamacoder.com/problempage.php?题目链接:https://kamacoder.com/problempage.php?

2024-06-25 09:49:46 330

原创 项目训练营第五天

将之前UserController中各函数的返回值改成泛型BaseResponse对象,便于对原本的返回值进行封装,采用装饰者模式在其外围加上一些参数。为了便于修改和返回BaseResponse对象,编写以下ResultUtils函数,对成功和失败的情况进行统一处理。通过编写全局异常处理类,将内部异常进行封装,不返回给前端代码关于代码结构的异常信息。为了方便对原本的参数值进行封装,编写一个枚举类记录各种常见的错误异常类型。将原本判断是否为管理员的语句封装,放到业务层中写成一个函数isAdmin。

2024-06-24 22:06:56 339

原创 算法训练营第六十九天 | 并查集理论基础、寻找存在的路径、冗余连接、冗余连接II

​。

2024-06-24 11:07:18 294

原创 项目训练营第四天

因为查询函数是UserMapper的内部方法,我们要在UserService中才能使用userMapper的内部方法达到解耦合的目的,因此我们要在UserServiceImpl中写一个searchUsers函数,供控制层UserController中的searchUsers函数调用。可自行将之前用queryWrapper的地方也进行下替换,逻辑比较简单,相信看到这里的小伙伴很聪明,一定能够自己实现完成出来。这里我们由于是在本地运行前后端,前端后端各占一个端口,就算是跨域了,所以我们需要用到代理的功能。

2024-06-23 19:56:35 897

原创 算法训练营第六十七天 | 卡码网110 字符串接龙、卡码网105 有向图的完全可达性、卡码网106 岛屿的周长

题解中用的广搜,可以去看下,说是最短路径用深搜比较麻烦,要确定哪条最短,我确定出来了,但还是超时了。广搜只要搜到就一定是最短路径了,先放这。这题很简单,没用到dfs和bfs,简单填充边界后判断周围是否触碰边界后计数即可。这题就比较轻松了,深搜也不需要完全回溯,只需要遍历记录即可。这题一开始用的邻接表+dfs,不幸超时。

2024-06-23 11:21:34 411

原创 第六十六天打卡 | 卡码网101 孤岛的总面积、卡码网102 沉没孤岛、卡码网103 水流问题、卡码网104 建造最大岛屿

先要用一个bfs的逻辑或者一个dfs的逻辑判断是否是孤岛,即是否遍历到的横向或者纵向相连的所有节点都不和最外层边界直接触碰,这里传参数有个技巧,原本都是用的引用,这里在传入visited数组的时候不用加引用符对原visited数组进行修改,否则就是直接在遍历了。训练营越到后面,其实是越来越顺的,一方面是有了动量和习惯气的支撑,另一方面也是前面的知识和编程技巧掌握了之后对于后面的解题很自然而然就用到了,所以建议前面的题目还是要认真刷,有时间的话建议也像这样子每天写个博客总结记录下,后面可以当成笔记来复习的。

2024-06-21 22:13:31 371

原创 项目训练营第三天

前面我们在service业务逻辑层编写了注册登录逻辑的代码,这次我们要将业务逻辑层封装到控制层中,便于request请求直接在控制层进行处理,实现解耦合。新建好后,编写请求地址,请求方式,传入参数等信息如下,点击运行,即可进行请求测试,也可在前面的控制层和业务逻辑层打断点进行测试。启动springboot后,在如下位置新建一个IDEA自带的http请求文件,也可自行用postman进行测试。其中用户删除功能使用的是Mybatis-plus自定义和封装的一个逻辑删除功能,之前已经提到过了。

2024-06-21 20:14:25 749

原创 第六十五天打卡 | 卡码网 99 岛屿数量(深搜版)、卡码网 99 岛屿数量(广搜版)、卡码网 100 岛屿的最大面积

类比二叉树层序遍历可以由上面的代码修改得到。卡码网 99 岛屿数量(深搜版)卡码网 99 岛屿数量(广搜版)代码写得还有点bug,明天再改吧。卡码网 100 岛屿的最大面积。

2024-06-21 00:55:04 77

原创 第六十四天打卡 | 卡码网98 所有可达路径(深搜 邻接矩阵版)

卡码网98 所有可达路径。

2024-06-20 00:16:59 107

原创 项目训练营第二天

前端请求后端一般使用ajax(Asynchronous Javascript And XML,即是异步的JavaScript和XML),它可以异步地向服务器发送请求,在等待响应的过程中,不会阻塞当前页面。在service文件夹中再建一个impl文件夹,在里面建一个UserServiceImpl.java文件,用extends继承该接口,加上@Service注解表示这是业务逻辑层。我们在项目中建一个名为service的文件夹,在该文件夹下面定义一个UserService.java存放如下的接口类。

2024-06-19 20:28:10 775

原创 项目训练营第一天

1、首先需要找文章下载好tomcat、JDK、maven、mysql、IDEA。(软件下载及环境变量配置略)2、在下载好的IDEA中,选择新建spring initial项目,选定java web,即可新建一个springboot项目3、在新建好的pom.xml中,按照网上教程导入spring依赖,用于依赖注入。(这里不懂的需要去补下尚硅谷spring教程,简单看懂即可)

2024-06-18 23:42:09 320

原创 算法训练营第六十三天 | LeetCode 42 接雨水、LeetCode 84 柱状图中最大的矩形

LeetCode 84 柱状图中最大的矩形。LeetCode 42 接雨水。

2024-06-18 23:40:41 60

原创 算法训练营第六十二天 | LeetCode 739 每日温度、LeetCode 496 下一个更大元素 I、LeetCode 503 下一个更大元素II

单调栈专题,用栈来记录一个递增或递减的序列,并在遍历过程中进出栈,维持栈内元素的递增或递减关系(非严格)。一般用来求解当前元素右边第一个比它大/小的元素。

2024-06-18 09:38:59 200

原创 算法训练营第六十天(延长12天添加图论) | LeetCode 647 回文子串、LeetCode 516 最长回文子序列

如果相等就都放入,并且dp[i][j]等于dp[i+1][j-1]+2,否则dp[i][j]取dp[i+1][j]、dp[i][j-1]、dp[i][j]中最大值即可。这就是这道题的递推逻辑了。原本是从前往后循环内从后往前统计回文字符串数目,这题是从中间往两边,看两边分别接触到的第一个字符是否相等。思路很简单,每一个dp[i]等于dp[i-1]加上当前字符向前直到0各个长度字符串回文串个数即可。初始化方式是在i==j时要初始化为1。或者将dp[i][i]初始化为1也行。这题要在上一题基础上稍微转换下思路。

2024-06-15 22:03:14 400

原创 算法训练营第五十九天 | LeetCode 115 不同的子序列、LeetCode 583 两个字符串的删除操作、LeetCode 72 编辑距离

也可以在第一个字符串中插入一个字符,可以视作在第二个字符串中删除一个字符, 即dp[i][j-1]+1,同样递推公式由两个字符串平齐,如果当前字符相等,则当前问题可由第一个字符串0~i-1和0~j-1匹配数及0~i-1和j匹配数相加所得;但是递推公式这一块把我给难住了。初始化方式依照这个逻辑,把dp[i][0]都初始化为i,dp[0][j]都初始化为j就行了。相等时dp[i][j]直接可以由dp[i-1][j-1]推出;还可以直接替换,即dp[i-1][j-1]+1。

2024-06-14 22:21:18 209 2

原创 算法训练营第五十八天 | LeetCode 392 判断子序列、卡码网模拟美团笔试第一、二、三题(300/500有待提高)

卡码网图论更新了可以去看看,模拟笔试第四题就是深搜/广搜还不太会。

2024-06-13 22:17:50 274 2

原创 算法训练营第五十七天(倒数第四天) | LeetCode 1143 最长公共子序列、LeetCode 1035 不相交的线、LeetCode 53 最大子数组和

也可以用动规的思路来思考,具体就是如果前一个下标dp值>=0的话,当前dp值由前一个下标dp值+当前元素值推出来,否则就直接等于当前元素值。这也是贪心思路用在递归中的体现了。dp数组含义是当前下标及以前元素中连续子数组最大和。和之前某道题目一样,但是要注意斜对角处理。所谓斜对角处理也就是说当不满足当前两个下标处的字符相同时,需要将dp数组取i,j-1处和i-1,j处的较大值。这是子问题拆分出的问题,这道题也是典型的动规题,一般会被计入课本中的。不过这好像算是伪动规,真正的动规我回头再改下。

2024-06-12 19:50:09 134 1

原创 算法训练营第五十六天 | LeetCode 300 最长递增子序列、LeetCode 674 最长连续递增序列、LeetCode 718 最长重复子数组

由于nums1[0]和nums2[0]不一定相等,所以我们把dp数组含义重新设定为nums1中第i个元素为末尾的子数组和nums2中第j个元素为末尾的子数组中公共的、长度最长的子数组的长度。这题dp数组应该设置为nums1中以下标i元素为末尾的子数组和nums2中以下标j元素为末尾的子数组中公共的、长度最长的子数组的长度。nums[i] > nums[j]时,nums[i]就可以由nums[j] + 1(j < i)中最大值得出了。这题dp数组定义得比较特殊,是以下标为i的元素为末尾的子序列的最大长度。

2024-06-11 20:38:13 256

原创 卡码网用友提前批笔试 | 121 大数减法、122 滑动窗口最大值、117 软件构建

需要处理下字符串输入转化为整数数组,由于']'之后还有一个',',需要用一个flag记录状态的变化。其他思路就是一个双重循环控制边界的问题了,小心调试潜在的数组或指针越界的问题就ok了。原本用set删除功能加以辅助计数,后来发现set.erase删除的是按下标访问的数据,而不是实际数据,map应该也差不多。后来知道会有很多数据甚至超过long long的范围,所以要用字符串模拟减法。改进后代码只能通过30%的测试用例,后面要再改改。一开始这么写,但是就是有90%的数据通过不了。122 滑动窗口最大值。

2024-06-10 21:41:52 231

原创 算法训练营第五十三天 | LeetCode 309 买卖股票的最佳时机含冷冻期、LeetCode 714 买卖股票的最佳时机含手续费

状态推导上,第一个状态可以由第一个状态,第二个状态当天买入,第四个状态当天买入推导出来;第二个状态可以由第第四个状态和第二个状态推导而来;第三个状态可以由第一个状态卖出推导而来,注意是卖出不是买入了;这一题需要设置四个状态,用于在买入时区分当天是冷冻期和当天可以正常卖出的情况。状态一是长期买入,状态二是包括当天在内两天没有卖出,也就是说当天是可以买入的了,状态三是前一天卖出,当天不能买入,状态四是前一天是冷冻期,当天可以正常买入。初始化时候将dp[0][0]初始化为-prices[0]即可。

2024-06-09 00:16:46 378 2

原创 算法训练营第五十二天 | LeetCode 123 买卖股票的最佳时机III、LeetCode 188 买卖股票的最佳时机IV

第二维表示未作操作,第一次买入,第一次卖出,第二次买入,第二次卖出五种状态,进行递推即可。注意这里dp数组下标含义是第i天,i从0开始,手头上的钱的数目。买入时要减去当天的价格,卖出则加上当天的价格。在上面的代码中稍做类比下修改即可。

2024-06-07 23:50:07 231 1

原创 算法训练营第五十一天 | LeetCode 121 买卖股票的最佳时机、LeetCode 122 买卖股票的最佳时机II

LeetCode 122 买卖股票的最佳时机II。LeetCode 121 买卖股票的最佳时机。

2024-06-07 00:07:00 76 1

原创 算法训练营第五十天 | LeetCode 198 打家劫舍、LeetCode 213 打家劫舍II、LeetCode 337 打家劫舍III

用哈希表记录下重复子问题就没问题了。直接用简单版递归会超时。

2024-06-05 21:18:50 204

原创 算法训练营第四十九天 | LeetCode 139单词拆分

LeetCode 139 单词拆分。基本还是完全背包的思路。

2024-06-04 22:25:15 199

原创 算法训练营第四十八天 | 卡码网57 爬楼梯、LeetCode 322 零钱兑换、LeetCode 279 完全平方数

这题dp数组含义和完全背包其实是完全相反的,要求能组成所要求总金额的最小钱币数。但是递推公式和完全背包问题几乎是完全一样了。递推逻辑中也要判断dp[j-coins[i]]是否等于j-coins[i]+1看递推中的子问题是否已经有解。的形式,最后如果还是等于i+1说明没有硬币组合满足条件,直接返回-1即可。,否则按照递推逻辑就会全部是0了。在上面两题理解了的基础上很容易想出来。排列dp + 完全背包问题。

2024-06-03 18:49:58 191

原创 算法训练营第四十六天 | 卡码网52 携带研究材料、LeetCode 518 零钱兑换II、LeetCode 377 组合总和IV

这次算法训练营题目,其实完全是按照代码随想录一路跟着来的,上面也有更好的、讲得更清楚的题解,有需要的小伙伴可以去那里看。我这里是之前已经大体刷过一遍,为了应对有可能会考到的面试题,现在在跟着一个专门的、要花钱的训练营补完笔记,加深理解。下面开始今天的刷题和笔记。

2024-06-01 15:33:58 630

原创 算法训练营第四十五天 | LeetCode 1049 最后一块石头的重量II、LeetCode 494 目标和、LeetCode 474 一和零

继续昨天没有详细说的01背包问题往下继续说。01背包问题是将dp从一维问题升维到二维之后会遇到的一类典型问题。dp数组自然而然地是一个横坐标表示物品序号-1,纵坐标表示背包重量的二维数组。01背包由一个背包是否放该物品并比照后得到最大值,来表示表示子问题和当前问题之间关系组成递推逻辑。递推过程中由于物品数组逐渐增加,dp[i][j]在每一轮总是由dp[i-1][j]递推而来,因此可以简化为用一维滚动数组来表示。但这样第二重循环中由于从前往后遍历dp[i][0]会被存放多次,因此要。

2024-05-31 17:21:32 538 1

原创 算法训练营第四十四天 | 01背包问题(二维dp数组、一维dp数组)、LeetCode 416 分割等和子集

LeetCode 416 分割等和子集。

2024-05-31 00:11:55 111 1

原创 算法训练营第四十三天 | LeetCode 343 整数拆分、LeetCode 96 不同的二叉搜索树

但这里递推逻辑要注意下,其实感觉看代码也能看得懂。递推逻辑中加入两个Math.max是要比较该数拆分后和原数之间哪个大,取比较大的那个。这题也可以用动规来写,dp数组含义是该数被拆分成k(k >= 2)个数的最大乘积。下标就是该数,遍历顺序也可以知道是从前往后遍历。这题其实可以用数学规律:乘积最大时总是分成的数最均衡时取到。LeetCode 96 不同的二叉搜索树。

2024-05-30 00:05:41 219

原创 算法训练营第四十二天 | LeetCode 42 不同路径、LeetCode 63 不同路径 II

当然我们也可以在递推过程中用if语句来判断,但这会让dp数组的含义变得混乱。所以不建议使用这种方法。由于我们定下的dp数组含义是到该位置序号处的路径数,所以。这题其实和上一题差不多,关键在于对于障碍物之后路径。

2024-05-28 21:48:18 608

原创 算法训练营第四十一天 | LeetCode 509 斐波那契数列、LeetCode 70 爬楼梯、LeetCode 746 使用最小花费爬楼梯

但是代价就是想的东西要多一些,也就是我们要找出子问题到当前问题的推导条件和它们之间的关系,比如这题就是两级台阶下的位置到当前位置可以一步到,一级台阶下的位置到当前位置可以一步到,我们将这两个子问题的方法数加起来就得到了当前问题的解。这题由于加入了开销,所以也无法像上一题那样从所有台阶下面开始往上跳,初始化时候直接将dp[0]和dp[1]初始化为1即可,原因和上一题一样,这里不再赘述。接下来初始化方法和遍历顺序是这样:我们找出能够和最开始子问题发生关联的最大下标,把它在递推公式中的子问题dp值初始化即可。

2024-05-27 19:26:27 305

原创 卡码网笔试 | 118 小y删数字、119 小红的字符串切割、120 小红的数字匹配

用一个end变量记录相同字符串最后一个字符的下标,每次i和i + 1比较得到两者是否相等的情况来维护end变量的值。当确定end是相同字符串最后一个字符的下标或者是整个字符串最后一个字符的下标时,我们用end - start + 1得到相同字符串的长度。在用字符串之前,我们可以用toCharArray()把它转化为一个字符数组,最后再用String的构造函数把它转化为字符串返回。如果是偶数,大于4的可以拆分前面三个字符为一个字符串,放入向量,后面也直接放入即可。3、将转化后的字符填入到原来问号字符中去。

2024-05-26 22:04:39 777

原创 算法训练营第三十九天 | LeetCode 738 单调递增的数字、LeetCode 968 监控二叉树

在这个数组中,从左往右遍历,如果遇到一个两数相等,并且记录的这个变量之前没有赋过值,那么将前一个数的下标存放到该变量中。如果在赋为前一个数下标之前,该变量已经被赋过值,这说明前面还有数和这两个数一样大,那么该变量的值不变就好。上述的处理其实有些冗余,但都是方便我们在遇到前一个数大于后一个数时,能够放心地减一,并把后面的数全部置为9,这就是我们找到的规律。一个节点状态去我们分为3种:为0表示无监控也无覆盖,为1表示有覆盖,为2表示是监控。左右节点都为1,当前节点无覆盖,等上层节点设监控。

2024-05-25 22:22:02 219

原创 算法训练营第三十八天 | LeetCode 435 无重叠区间、LeetCode 763 划分字母区间、LeetCode 56 合并区间

大概也还是双指针,并且每次循环开始将j固定在i+1位置开始遍历,如果j起始位置小于i结束位置,注意是小于,这里是重叠,不包含挨在一起的情况,就将需要去重叠的区间数+1,并且更新下最小左边界。这题用的就是我上一题没用上的思路,就是先排序后比较,比较的是两个相邻区间中左区间右边界和右区间左边界之间是否重叠,有的话就将第二个区间左边界更新成两个区间中较小的左边界,将右边界更新成两个区间中较大的右边界,遇到当前区间已经是最后一个区间或者下一个区间不相邻的情况就直接将当前区间入向量即可。

2024-05-24 14:50:45 181

空空如也

空空如也

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

TA关注的人

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