自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 图论基础1

用 二维数组来表示图结构。邻接矩阵是从来表示图,有多少节点就申请多大的二维数组。

2024-09-02 15:37:06 422

原创 贪心算法总结

i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。

2024-09-02 15:32:29 1381

原创 动态规划-子序列问题

1.位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值。。3. dp[i](即最长递增子序列)起始大小至少都是1.4. 从前向后遍历。

2024-08-25 22:01:47 464

原创 动态规划-股票问题

单独列出一个状态的归类为「不持有股票的状态」,因为本题有冷冻期,而冷冻期的前一天,只能是 「今天卖出股票」状态。1. dp[i][j]中 i表示第i天,j为 [1 - 4] 四个状态,dp[i][j]表示第i天状态j所剩最大现金。4. 从前向后遍历。4. 从前向后遍历。

2024-08-25 21:02:13 720

原创 动态规划-打家劫舍

1.。4.从前往后。

2024-08-20 15:00:15 164

原创 动态规划-背包问题

力扣(LeetCode)本题与上一题是一个意思。只是对dp[target]的处理方式不同。只要尽量让石头分成重量相同的两堆,相撞之后剩下的石头就会是最小的。在计算target的时候,target = sum / 2 因为是向下取整,所以sum - dp[target] 一定是大于等于dp[target]的。那么相撞之后剩下的最小石头重量就是 (sum - dp[target]) - dp[target]。sum += i;//初始化dp数组i++) {//采用倒序j--) {

2024-08-19 17:41:04 1023

原创 动态规划-基础

动态规划中每一个状态一定是由上一个状态推导出来的。而贪心没有状态推导,是从局部直接选最优的。

2024-08-16 20:26:10 170

原创 2024.08.14 用友笔试-2-Java

小友正在优化财务报表分析功能。给定一个由不同整数构成的数组revenues,每个元素表示在不同时间段内的收入。我们用以下方式定义一个与revenues长度相同的数组maxDurations:maxDurations[i]:是一个子数组revenues[l...r] 的最大长度,该子数组中的最大收入等于revenues[i]。返回数组 maxDurations。注意,子数组是数组的连续部分。第一行输入n,表示数组的长度输入长度为n的数组的各个元素6。

2024-08-15 10:13:17 606

原创 排序算法汇总

.冒泡排序

2024-07-31 13:26:59 344

原创 消息队列总结

如果某个 Topic 消息量很大,应该给它多配置几个 Queue,并且尽量多分布在不同 broker 上,以减轻某个 broker 的压力。分区是 Kafka 读写数据的最小粒度,比如主题 A 有 15 条消息,有 5 个分区,如果采用顺序轮询的方式,15 条消息会顺序分配给这 5 个分区,后续消费的时候,也是按照分区粒度消费。由于分区可以部署在多个不同的机器上,所以可以通过分区实现 Kafka 的伸缩性,比如主题 A 的 5 个分区,分别部署在 5 台机器上,如果下线一台,分区就变为 4。

2024-07-21 21:30:43 594

原创 排序思想-快排

快速排序核心思想就是每次在当前区间 [left, right] 中选择出一个元素 nums[p],然后将区间内所有大于它的元素和所有小于它的元素都放到其两侧【具体放在哪一侧取决于是升序还是降序】,然后再递归去处理两侧区间。将大于切分值的元素都放到左侧,小于切分值得元素都放到右侧。因此我们可以使用双指针分别从两端往中间搜索,分别找到左侧小于切分值的元素和右侧大于切分值的元素,交换之,直到两个指针相遇。

2024-07-17 14:51:05 463

原创 二叉树广度优先遍历

二叉树的广度优先遍历也叫层序遍历。

2024-07-01 17:12:54 157

原创 并查集练习

表示每行中有多少列。如果我们知道每行的列数,那么我们知道需要跳过多少个元素才能从一行移动到下一行。注意:为确保索引唯一性,index 函数应使用网格列数 m 进行行列转换。通常不表示每列中的元素数目(除非是在一个完全对称的网格中,即。

2024-06-27 13:43:42 160

原创 深(广)度优先遍历

从某个结点出发,BFS 首先遍历到距离为 1 的结点,然后是距离为 2、3、4……当处理完所有的 g[i] 后,将所有的入度为 0 的课程(含义为没有前置课程要求的科目)进行入队操作,跑一遍「拓扑排序」,若所有课程都能顺利出队,说明所有课程都能使完成。实际上就是求腐烂橘子到所有新鲜橘子的最短路径。若课程 a 存在前置课程 b 的话,我们添加一条从 b 到 a 的有向边,同时统计所有点的入度。还有一个点要明确:节点的值仅仅表示从根节点到本节点的路径构成的字符串是否有效而已。1.找到入度为0的点,入队。

2024-06-20 16:29:12 167

原创 高频考题-LRU缓存机制

删除操作需要找到该节点的前驱节点和后继节点。对于寻找前驱节点,单向链表需要从头开始找,也就是要O(n)时间,双向链表可以通过前向指针直接找到,需要O(1)时间。随着节点的插入,dummy 的 next指向链表的第一个节点,prev指向链表的最后一个节点。这样以来,我们首先使用哈希表进行定位,找出缓存项在双向链表中的位置,随后将其移动到双向链表的头部,即可在 O(1)的时间内完成 get 或者 put 操作。双向链表按照读取的顺序存储键值对,靠近头部的键值对是最近使用的,尾部的键值对是最久未使用的。

2024-06-18 11:23:22 413

原创 技巧栏练习题

在这之后,我们遍历哈希映射中的所有键值对,返回值最大的键。我们同样也可以在遍历数组 nums 时候使用打擂台的方法,维护最大的值,这样省去了最后对哈希映射的遍历。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。我们将数组下标 n 和数 nums[n] 建立一个映射关系为 n->f(n)。首先明确前提,整数的数组 nums 中的数字范围是 [1,n]。2.找到数组中的重复整数 <==> 找到链表的环入口。任何数和0 做异或运算,结果仍然是原来的数。位其实就是从低位到高位的第一个下降的数。

2024-06-13 16:38:02 365

原创 矩阵练习2

规律:对于矩阵中第 i行的第 j 个元素,在旋转后,它出现在倒数第i 列的第 j 个位置。可以使用辅助数组,如果不想使用额外的内存,可以用一个临时变量。还可以通过水平翻转后再进行主对角线翻转。

2024-06-11 11:59:40 467

原创 矩阵练习1

首先我们需要标记需要置零的行和列,可以在遍历矩阵中的元素遇到0,则将其行首和列首元素置为0。在此过程中首行、首列会受影响,因此先用两个变量记录首行、首列是否需要被置0,接着遍历非首行、非首列的元素。

2024-06-06 11:35:06 439

原创 数组练习1

步骤:对数组进行一次遍历,对于遍历到的数 x=nums[i],如果 x∈[1,N],交换 nums[i]和 nums[x−1],这样 x 就出现在了正确的位置。在完成交换后,新的 nums[i]\ 可能还在[1,N] 的范围内,需要继续进行交换操作,直到 x∉[1,N]。这里我采用的是通过置换将数组恢复成[1, 2, ..., N] 的形式,但其中有若干个位置上的数是错误的,每一个错误的位置就代表了一个缺失的正数。实际上,对于一个长度为 N 的数组,其中没有出现的最小正整数只能在 [1,N+1] 中。

2024-06-04 11:09:10 222

原创 贪心练习1

该题要保证一个字母只出现在一个区间片段,关键是找到一个字母的起始位置,可以用一个数组统计字母的最远结束位置。

2024-05-29 10:50:40 237

原创 回溯练题03

组合型回溯括号的个数是确定的,不选左括号,就选右括号,因此可以根据选不选左括号来考虑。如果左括号个数还不够,就可以选左括号,否则,只能选右括号。另外右括号的个数不能超过左括号个数,比如左右括号个数相等的时候,就只能选择左括号了。

2024-05-28 12:26:18 184

原创 回溯-组合

注意这道题说,可以重复选某个元素,对应于完全背包。

2024-05-27 15:39:23 138

原创 回溯-恢复现场

【代码】回溯-恢复现场。

2024-05-23 13:46:07 123

原创 二维dp01

dp[i][j]:考虑到达位置[i,j]的不同路径数;代码如下:1.可以分条件讨论2.由于只能向下或是向右移动,所以0行和0列的不同路径只有1条。直接写出dp值。

2024-05-22 12:50:47 221 1

原创 背包动态规划

该题是完全背包序列 DP 通常需要结合题意来寻找前驱状态,即需要自身寻找拓扑序关系(例如本题,需要自己通过枚举的方式来找左端点,从而找到可转移的前驱状态dp[j−1]。dp[i] :考虑前 i个字符,能否使用 wordDict 拼凑出来:当 dp[i]=truef 代表 s[1...i] 能够使用 wordDict 所拼凑,反之则不能。

2024-05-21 11:58:11 121

原创 完全背包01

对于整数n而言,最大的完全平方数

2024-05-20 14:45:30 123

原创 图,拓扑排序

【代码】图,拓扑排序。

2024-04-01 10:51:57 137 1

原创 最长递增子序列

【代码】最长递增子序列。

2024-03-26 19:59:21 114

原创 子数组最大累加和

【代码】子数组最大累加和。

2024-03-25 16:12:38 212

原创 三维动态规划

【代码】三维动态规划。

2024-03-25 09:43:16 170

原创 二维动态规划

思路二:区间dp,从区间的首尾来尝试,整个过程是从下往上,从左往右,要得到的是右上角。3.其余位置,又分为区间端点值相等否两种情况讨论。该题无法整理出严格位置依赖,其路径取决于上下左右中小的一个。不过题意严格递增,不会出现走回头路的情况,只需要挂个dp表记录即可。1)当区间值不等(s[L]!= s[R])时,取[L,R-1] 和 [L+1, R] 区间的最大值。2)当区间值相等(s[L] == s[R])时,2+[L+1, R+1]思路一:原始串与逆序串的最长公共子序列,就是原串的最长回文子序列。

2024-03-24 15:06:26 275 1

原创 递归与回溯总结

思路:将第一个柱子 from 的盘子移到第三个柱子 to ,需要借助第二个柱子 other。

2024-03-19 14:00:00 495 1

原创 List常用操作

List<泛型> list= new ArrayList<>();方法:删除List中包含在指定集合中的所有元素;将指定集合中的所有元素添加到List的末尾;删除List中第一个出现的指定元素;返回第一次出现指定元素的索引位置。将指定元素添加到List的末尾;返回List索引位置上的元素。

2024-03-18 13:55:49 249

原创 二叉树总结Ⅰ

二叉树的每个节点最多只能包含两个子节点。在解题过程中二叉树主要有两种形式:满二叉树和完全二叉树。

2024-03-18 08:00:00 1683

原创 栈与队列区别

访问队头元素:peek();取栈顶元素:peek();队列大小:size();入队:offer();入栈:push();出队:poll();

2024-03-17 17:14:45 117 1

原创 栈与单调栈

栈是先进后出。

2024-03-17 12:01:51 1682 1

原创 链表小总结

/ 结点的值int val;// 下一个结点// 节点的构造函数(无参)// 节点的构造函数(有一个参数)// 节点的构造函数(有两个参数)

2024-03-13 21:21:05 1526 1

原创 二分查找总结

根据左右指针计算中间位置 m,并比较 m 与 m+1 的值,如果 m 较大,则左侧存在峰值,r = m,如果 m + 1 较大,则右侧存在峰值,l = m + 1。思路:旋转之后部分有序,我们找到mid,如果[left,mid]区间有序,且mid值在端点值之间,就在这部分有序数据中查找,否则,在无序数据中查找。思路:通过比较中值与右值,可以确定最小值的位置范围,从而决定边界收缩的方向。题意是:在排序数组中寻找是否存在一个目标值,存在返回值,不存在则返回按顺序插入的位置。将计算的mid映射到矩阵的下标。

2024-03-12 17:17:21 336 1

原创 Bean的生命周期,找不到@PostConstruct和@PreDestroy

1.出现这种情况的原因是:我使用的是JDK17的版本,而JDK11就移除了这些注解。2.解决办法就是在父工程的pom.xml文件中添加必要的依赖项。3.最后刷新一下maven就可以了。

2024-01-10 17:31:19 583 1

原创 【算法】二分查找

//表示查找值在左半区域,故右指针前移,其指向的m索引在上一次循环已经判断过,不需要再次判断。特点:①不在循环内找target,循环只是缩小范围,当范围内只剩下i时,退出循环,在循环外比较arr[i]与target。2)当target=arr[m]时,用变量candidate=m,然后继续向左找,缩小边界j=m-1;2)当target=arr[m]时,用变量candidate=m,然后继续向右找,缩小边界i=m+1;2)while(i<=j):“=”是多考虑一次,即当指针i=j=m指向同一元素。

2023-08-27 15:36:44 106

空空如也

空空如也

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

TA关注的人

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