自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Day64|代码随想录二刷总结

数组与链表,本科数据结构的常客了,学习的更多是List和数组的区别,怎么更好的操作数组,list转数组,数组转list等;栈与队列,声明优先队列的方法,范型,包装类。哈希表与字符串,学会了java中map和一些字符串函数的用法,题目其实不是很难,以及java怎么更方便的操作字符串,StringBuilder的使用。二叉树部分,之前的递归框架也没忘,能ac的题更加多了,更重要的是学会了调试。

2024-05-08 12:53:28 484

原创 Day63|单调栈part02:84.柱状图中最大的矩形

是找每个柱子左右两边第一个大于该柱子高度的柱子,而本题是找每个柱子左右两边第一个小于该柱子的柱子。本题和接雨水使用单调栈的解法类似,只不过接雨水找的是。

2024-05-07 15:37:27 464

原创 Day62|单调栈part01:503.下一个更大元素II、42. 接雨水

给定一个循环数组nums的下一个元素是nums[0]),返回 nums中每个元素的。也就是说数组是首尾相连的,每次返回的是右边第一个最大元素。

2024-05-06 10:57:29 434

原创 Day31:单元测试、项目监控、项目部署、项目总结、常见面试题

Component//访问路径:/actuator/database//通过连接池获取连接,查询数据库@Autowired//ReadOperation表示只能通过GET请求访问try () {return CommunityUtil.getJsonString(0, "获取连接成功!");logger.error("获取连接失败!return CommunityUtil.getJsonString(1, "获取连接失败!");常见面试题(Deprecated)等到面试在看。

2024-05-05 22:23:39 542 1

原创 Day30:热帖排行、生成长图、将文件上传到云服务器、优化热门帖子列表、压力测试

不同的算分方式:只存变化的帖子到redis中,每五分钟算一次分,定时任务。

2024-05-05 21:28:45 419

原创 Day29:Spring Security、SpringSecuriyDemo、权限控制、开发置顶加精和删除、Redis高级数据类型、网站数据统计、任务执行和调度

原理图:(DispatcherServlet是SpringMVC的,Servlet是JavaEE规范的)

2024-05-05 14:49:04 592

原创 Day61|单调栈part01:739. 每日温度、496.下一个更大元素 I

单调栈常常用于解决一类“下一个更大元素”或“下一个更小元素”的问题,例如LeetCode中的739题“每日温度”。。时间复杂度为O(n)。给定一个整数数组,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。这题的意思就是第一天是73,比其更高的74出现在一天之后,故输出1;就是对单调栈基本没了解, 直接看题解。。。

2024-05-05 14:43:22 579

原创 Day60|动态规划part17:647. 回文子串、516.最长回文子序列、动态规划总结篇

确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组。

2024-05-05 14:11:23 743

原创 Day56|动态规划part16:583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇

dp[i][0]:words1[i - 1]和words2[-1](空字符串),全部删除,等于i。主要还是考虑word1[i - 1]和word2[j - 1]的相等情况。相等:dp[i][j] = dp[i - 1][j - 1];从前往后,所以在dp矩阵中一定是从左到右从上到下去遍历。(这里没有添加,因为一个添加就相当于另一个删除)涉及的操作太多了,没啥思路,直接看题解。dp[0][j] 同理为j。

2024-04-30 16:35:36 308

原创 Day28:ElasticSearch入门、Spring整合ES、开发社区搜索功能

Elasticsearch简介Elasticsearch术语。

2024-04-30 00:55:39 2106 5

原创 Day54|动态规划part15:392.判断子序列、115.不同的子序列

这题我用的方法就是1143找公共子序列的方法,求两者的最大子序列长度,如果与s长度相等)短的那个),就是子序列:O(n*m)也可以用双指针方法:(这个时间复杂度O(n),比较优秀)

2024-04-29 16:36:54 311

原创 Day53|动态规划part14: 1143.最长公共子序列、1035. 不相交的线、53. 最大子序和

这题有点像递增子序列和公共子数组的组合, 要求公共子序列不一定非要是连续的。dp[i][j]表示text1[i - 1]与text2[j - 1]结尾的最高公共子序列。长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]最后返回的结果是**dp[text1.length()][text2.length()],**因为这里不相等并不是推倒重新再来,因此遍历到最后一定是最大的。

2024-04-27 10:53:04 334

原创 Day52|动态规划part13:300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

举个例子A[0]如果和B[0]相同的话,dp[1][1] = dp[0][0] + 1,只有dp[0][0]初始为0,正好符合递推公式逐步累加起来。但dp[i][0] 和dp[0][j]要初始值,因为 为了方便递归公式dp[i][j] = dp[i - 1][j - 1] + 1;dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。如果A[i-1] 和B[i - 1]相同,dp[i][j] = dp[i - 1][j - 1] + 1。

2024-04-26 15:36:14 374

原创 Day27:阻塞队列、Kafka入门、发送系统通知、显示系统

阻塞队列BlockingQueueBlockingQueue解决线程通信的问题。阻塞方法:put、take。生产者消费者模式生产者:产生数据的线程。消费者:使用数据的线程。(Thread1生产者,Thread2消费者)实现类ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueue、SynchronousQueue、DelayQueue等。@SpringBootTest@ContextConfiguration

2024-04-25 23:06:57 1333 3

原创 Day51|动态规划part12:309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

【代码】Day51|动态规划part12:309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费。

2024-04-25 13:43:35 248

原创 Day50|动态规划part11:188.买卖股票的最佳时机IV、123. 买卖股票的最佳时机III

这题限制更多了,改成买卖两次,可以买卖一次也可以买卖两次,选择更多了。有点蒙,直接看题解,dp五部曲。

2024-04-24 10:15:58 388

原创 Day26: Redis入门、开发点赞功能、开发我收到的赞的功能、重构点赞功能、开发关注、取消关注、开发关注列表、粉丝列表、重构登录功能

例如,如果 System.currentTimeMillis() 返回 1633024800000,那么这表示从 1970 年 1 月 1 日 00:00:00 GMT 到现在已经过去了 1633024800000 毫秒。这个方法常常被用来测量代码的执行时间,或者生成一个唯一的时间戳。在 Redis 中,如果在设置键值对时没有显式地指定过期时间,那么这个键值对将会一直存在,直到被显式地删除或者当 Redis 内存不足需要淘汰数据时被自动删除。,在这个回调中,它启动一个Redis事务,然后执行一系列的操作。

2024-04-23 15:18:25 1014

原创 Day49|动态规划part10:121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

正统更广泛的解法是动态规划。dp[i][0] 表示第i天持有股票所得最多现金dp[i][1] 表示第i天不持有股票所得最多现金如果第i天持有股票即dp[i][0], 那么可以由两个状态推出来如果第i天不持有股票即dp[i][1], 也可以由两个状态推出来同样dp[i][1]取最大的,dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);dp[0][1]表示第0天不持有股票,不持有股票那么现金就是0,所以dp[0][1] = 0;

2024-04-23 10:48:24 315

原创 Day48|动态规划part09:198.打家劫舍、213.打家劫舍II、337.打家劫舍III

两种选择,偷这一家或者不偷:还有这种,看看哪个比较好理解:还有将空间复杂度降到常数级:213.打家劫舍II这题增加的条件就是首尾也是相邻的。也就是说第一间屋子和最后一间是相邻的。因此可能存在三种情况(实际上是两种)也就是把上面的rob函数用两次,找到最大值即可:337.打家劫舍III这题的房子又进阶成二叉树了,没啥思路,直接看题解:这道题目算是树形dp的入门题目,因为是在树上进行状态转移,我们在讲解二叉树的时候说过递归三部曲,这里我们要求一个节点 偷与不偷的两个状态所得到的金钱,那么返回值就是一

2024-04-22 10:44:11 898

原创 Day45|动态规划part07:70. 爬楼梯 (进阶)、322. 零钱兑换、279. 完全平方数

之前已经做过这题了,实际上这题可以抽象成一个(只有两种物品,一个1一个2,但是可以无限取),接下来用动规五部曲重新分析一下。dp[j]表示爬楼梯为j时的爬法。跟之前组合问题总和一样,问的是爬法数量:dp[j] = dp[j - value[i]],其中value={1,2}dp[0] = 1;每一步可以走多次,这是完全背包,内循环需要从前向后遍历。总结:排列先遍历背包,组合先遍历物品。

2024-04-21 21:18:08 323

原创 Day44|动态规划part06:完全背包、518. 零钱兑换II、377. 组合总和IV

有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。,求解将哪些物品装入背包里物品价值总和最大。与0-1背包的区别在于每件物品都有无限个;01背包和完全背包唯一不同就是体现在上。

2024-04-21 20:49:01 259

原创 Day43|动态规划part05: 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零

本题物品的重量为stones[i],物品的价值也为stones[i]。对应着里的物品重量weight[i]和 物品价值value[i]。。01背包的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);既然 dp[j]中的j表示容量,那么最大容量(重量)(也就是target)是多少呢,就是所有石头的重量和。定为target15001即可, 也可以将数组相加再/2在。

2024-04-17 11:13:31 1024

原创 Day42|动态规划part04: 01背包问题,你该了解这些!、滚动数组、416. 分割等和子集

其他背包,面试几乎不会问,都是竞赛级别的了,leetcode上连多重背包的题目都没有,所以题库也告诉我们,01背包和完全背包就够用了。而完全背包又是也是01背包稍作变化而来,即:完全背包的物品数量是无限的。

2024-04-17 09:47:28 975

原创 Day41|动态规划part03:343. 整数拆分、96. 不同的二叉搜索树

这两题都是dp数组是一维但打表的时候用到了二维,因此时间复杂度是o(n2),外层循环i用来存结果,j用来穷举优化结果。

2024-04-15 09:35:28 193

原创 Day39|动态规划part02:62.不同路径、63. 不同路径II

【代码】Day39|动态规划part02:62.不同路径、63. 不同路径II。

2024-04-13 21:55:11 194

原创 Day38|动态规划part01:理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

注意数组越界问题,特殊情况特殊判断;

2024-04-12 11:26:49 224

原创 Day37|贪心算法part06:738.单调递增的数字、968. 监控二叉树、贪心总结

最近发现总结还有每道题的总结,之后大批量刷的时候根据总结去刷题。

2024-04-12 09:51:36 492

原创 Day36|贪心算法part05:435. 无重叠区间、763.划分字母区间、56. 合并区间

(以上就是不重叠区间的用法,用总区间数 - 不重叠区间数就是要删除的区间树)

2024-04-11 16:14:55 502

原创 Day35|贪心算法part04:860.柠檬水找零、406. 根据身高重建队列、452. 用最小数量的箭引爆气球

这是一个模拟题,但也有贪心思想:5块更通用,所以20的时候优先用10块。

2024-04-09 19:29:28 571

原创 Day34|贪心算法part03:1005.K次取反后最大化的数组和、134. 加油站、135.分发糖果

按照“绝对值”从大到小排序,如果数字小于0将其翻转,最后检查k有没有用完,没用完就反复翻转绝对值最小的数。IntStream.of(nums): 这一步将nums数组转换为一个IntStream流。.boxed(): 这一步将IntStream流转换为Stream流。这是因为IntStream流没有sorted()方法可以接受自定义的比较器,而Stream流可以。

2024-04-08 10:33:49 420

原创 Day32|贪心算法part02:122.买卖股票的最佳时机II、55. 跳跃游戏、45. 跳跃游戏II

我发现贪心很多时候是用来解决“差值”的问题,而且题目并不会要求输出具体路径,而往往是求和或者判断是否符合条件。贪心没有套路,贪心能做的DP一定也能做,反之不一定成立。差值问题注意起始和终止两个点的处理。使用贪心算法的实际应用还挺多,比如赫夫曼编码也是一个经典的贪心算法应用。更多时候运用贪心算法可能不是求最优解,而是求次优解以节约时间,比如经典的旅行商问题。

2024-04-07 20:54:35 507

原创 Day31|贪心算法part01:理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和

记得贪心。

2024-04-05 13:30:24 650

原创 Day30|回溯算法part06:332.重新安排行程、51. N皇后、37. 解数独、总结

回溯法一刷算是基本结束了,总结一下。

2024-04-04 12:06:21 232

原创 Day29|回溯算法part05:491.递增子序列、46.全排列、 47.全排列 II

leetcode上本题叫做非递减子序列,点名序列存在重复元素的情况。

2024-04-03 17:26:12 270

原创 Day28|回溯算法part04:93.复原IP地址、78. 子集、90. 子集II

这就是一个切割问题,跟切割子串类似,但是这题使用.切割。

2024-04-03 13:42:23 287

原创 Day27|回溯算法part03:39. 组合总和、40.组合总和II、131.分割回文串

跟III的区别在于候选元素从原来的数字换成具体的数组了,其他的大概逻辑没有变,还有就是startIndex穿进去的时候不用+1(因为可以重复添加自身)

2024-04-01 09:29:40 470

原创 Day25|回溯算法part02:216.组合总和III、17.电话号码的字母组合

(注意sum+i的位置)

2024-03-30 15:49:00 218

原创 Day24|回溯算法part01:理论基础、77. 组合

回溯算法中函数返回值一般为void。再来看一下参数,因为回溯算法需要的参数可不像二叉树递归的时候那么容易一次性确定下来,所以一般是先写逻辑,然后需要什么参数,就填什么参数。

2024-03-29 11:00:04 273

原创 Day25:统一处理异常、AOP编程、统一记录日志

表现层在最外面,异常在这层处理。

2024-03-28 23:11:06 927

原创 Day24:私信列表、私信详情、发送私信

测试用户:用户名aaa 密码aaa。

2024-03-28 21:46:51 620

空空如也

空空如也

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

TA关注的人

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