自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 093-005 最长回文子串

当然这个题我用for暴力肯定是不是最优解的。还是要好好学习一下字符串的多维动态规划。字符串的题我好像一直都做的不太好。更新最长回文子串的起始索引和长度。初始化,所有单个字符都是回文。从第二个字符开始(索引为。且首尾字符相同,则是回文。如果字符串长度小于等于。最长回文子串的起始索引。

2025-07-16 10:30:00 471

原创 094-1143 最长公共子序列 (字符串的多维动态规划还是不简单

数组做初始化操作,为了方便对第一个字符位置做初始化操作,所以下标从。dp[i][j] 代表字符串0-i和0-j的最长公共子序列。开始列出状态转移方程。

2025-07-16 08:00:00 321

原创 092-064 最小路径和

独立完成,和上一题思路一毛一样。

2025-07-15 14:15:00 96

原创 091-062 不同路径

题目我的思考+word题解题解题解思路classSolutionpublicintintmintn) {int[][]dpnewint[m][n];forinti0;i<m;0]=1;forintj0;j<n;j++) dp[0][j]=1;forinti1;i<m;i++){forintj1;j<n;j++){11returndp[m-1][n-1遇到的问题分析学习到的知识点。

2025-07-15 12:45:00 94

原创 090-032 最长有效括号 (明显用栈更好

这个过程通过栈来追踪每个未匹配的 '(' 的位置,并利用这些位置来计算当前找到的有效括号长度。希望这个详细过程能帮助你更好地理解栈方法的实现!这个问题可以通过动态规划或栈来解决。这里介绍使用栈的方法,因为它相对更容易理解。如果栈为空,将当前索引压入栈,栈顶元素始终是子串起始位置的。如果栈不为空,计算当前有效长度并更新最大长度。在每次找到一个有效括号时,更新最大长度。,检查是否可以形成更长的有效括号。当前索引和栈顶元素的索引差值。返回最长有效括号的长度。返回最长有效括号的长度。

2025-07-15 12:15:00 618

原创 089-416 分割等和子集 01背包

LeetCode中“分割等和子集”(Partition Equal Subset Sum)的问题要求判断一个非空数组是否可以分割成两个和相等的子集。这实际上是一个经典的。如果总和是奇数,不可能分割成两个和相等的子集。目标是找到一个子集,使得其和等于总和的一半。dp[i] 表示是否存在子集和为 i。的子集是存在的(空集),表示是否存在子集和为。表示是否存在子集和为。

2025-07-14 19:30:00 476

原创 088-152 乘积最大子数组⭐⭐⭐

我们需要同时跟踪最大乘积和最小乘积,以确保在遇到负数时能够正确更新最大乘积。更新最大乘积,当前值、当前值乘以上一个最大乘积和当前值乘以上一个最小乘积中的最大值。更新最小乘积,当前值、当前值乘以上一个最大乘积和当前值乘以上一个最小乘积中的最小值。更新最大乘积,当前值或当前值乘以上一个最大乘积或当前值乘以上一个最小乘积中的最大值。更新最小乘积,当前值或当前值乘以上一个最大乘积或当前值乘以上一个最小乘积中的最小值。在数组中存在负数时,最小乘积可以在遇到另一个负数时转换为最大乘积。初始化最大乘积、最小乘积和结果。

2025-07-14 19:00:00 636

原创 windows下批量修改文件前缀

写在txt中,但是默认是UTF-8,会出现中文乱码,这个时候我们需要将txt文件。[文件名.bat],同时将编码方式设置为。

2025-07-12 22:00:34 115

原创 087-300 最长递增子序列

/好好好,当时就没弄懂是吧 24/12/19更。数组中的最大值,即最长递增子序列的长度。24/12/19看到了+二分查找的优化。数组,每个位置的初始值为。双指针,还是很好理解的。

2025-07-12 16:30:00 1090

原创 086-139 单词拆分 3

HashSet 是 Java 集合框架中的一个重要类,用于存储。前 i 个字符是否可以被拆分成字典中的单词。一旦找到一个满足条件的拆分,停止内层循环。如果是遍历字符串会非常非常麻烦!它基于哈希表实现,具有高。本质考察的还有对字符串的处理。初始条件:空字符串可以被拆分。效的插入、删除和查找操作。

2025-07-12 10:15:00 560

原创 085-322 零钱兑换

dp数组存储的是每个金额对应需要的最少硬币个数。仍然是正无穷大,说明无法凑成该金额,返回。,每个元素初始化为正无穷大。,说明可以使用这个硬币。

2025-07-11 13:00:00 294

原创 084-279 完全平方数

将 dp 数组的每一个元素都设置为 Integer.MAX_VALUE,通常用于动态规划初始化,表示某个状态的初始值为无穷大(即不可达)。Integer.MAX_VALUE 是 java.lang.Integer 类中的一个常量,表示 Java 中 int 类型的最大值。这行代码的主要目的是将数组 dp 中的所有元素都设置为 Integer.MAX_VALUE,也就是 Java 中表示整数最大值的常量。fill 是 Arrays 类中的一个静态方法,用于将指定值填充到数组的每一个元素中。

2025-07-11 12:00:00 260

原创 083-198 打家劫舍

/ 进一步对滚动数组的空间优化 dp数组只存与计算相关的两次数据。DP数组中要保存的到当前房子时候所能打劫到的最多的钱。的值为偷当前房子和不偷当前房子两种情况中的较大值。格空间 只记录与当前计算相关的前两个结果。首先要考虑的是DP数组要保存的是什么?我还记得我写过呢,一点印象都没有啊。如果不偷当前房子,则金额为。如果偷当前房子,则金额为。个房子能偷到的最多金额。从第三个房子开始遍历。

2025-07-11 07:27:40 240

原创 082-118 杨辉三角

中间元素是前一行两个元素之和。还是蛮简单的,就是基本的方法。学习:加强对容器的熟练使用。从第二行开始构建杨辉三角。将当前行添加到三角形中。其实还好吧,有几个点。每行的最后一个元素是。

2025-07-11 07:27:01 379

原创 081-070 爬楼梯

题目我的思考+word题解classSolutionpublicintintn) {if(n<=2returnn;int[]dpnewint[n+1dp[1]=1;dp[2]=2;forinti3;i<=n;i++){1]+dp[i-2returndp[n];

2025-07-11 07:26:27 270

原创 java并发编程

主题架构是黑马多线程课的总结,比较简单,通俗易懂,适合入门

2025-07-11 07:24:26 263

原创 080-763 划分字母区间

对于输入 s = "eccbbbbdec",字符串中只能划分为一个片段 "eccbbbbdec",它的长度为 10。这个流程显示了如何根据每个字符的最后出现位置来动态划分字符串,使得每个片段的字母不重复出现在其他片段中。找出字符串的划分方案,使得每个字母只出现在一个片段中,并返回每个片段的长度。我们开始第二次遍历字符串,并根据每个字符的最后出现位置来划分片段。我们首先遍历字符串 s,记录每个字符最后出现的位置。遍历字符串,把每个字母出现的首尾下标放入hash表。当遍历到片段的结束位置时,进行划分。

2025-07-10 07:35:31 576

原创 079-045 跳跃游戏Ⅱ 略微抽象

通过这个用例,你可以清楚地看到算法如何在遍历数组的过程中计算最远能到达的位置,并通过尽可能大的跳跃次数来减少总跳跃次数。核心思想是在遍历数组时,用两个变量 currentEnd 和 farthest 来记录当前跳跃范围的终点和最远能到达的位置。如果当前跳跃范围的终点已经到达或超过了最后一个位置,则直接跳出循环。到达了最远位置的下一跳也是最远距离内所有位置能到达的最远距离。每次跳跃的终点并不是指从当前位置跳跃的最远距离。找出从第一个位置到最后一个位置的最少跳跃次数。更新当前跳跃范围的终点为最远能到达的位置。

2025-07-10 07:35:01 539

原创 078-055 跳跃游戏 2

如果在某个位置上,你的最远到达距离没有办法继续推进(即你被卡住了),则返回 false。如果在某个位置上,最远能到达的距离已经超过了数组的最后一个位置,则返回 true。我们可以从左到右遍历数组,并在每个位置上计算你能到达的最远位置。如果当前索引超过了最远可达的位置,则不能到达最后一个位置。如果最远可达的位置已经超出了或达到了最后一个位置,返回。,表示不能到达最后一个位置。初始化最远可达的位置为。如果循环结束后没有返回。这道题的关键在于确定你。

2025-07-10 07:33:44 148

原创 077-121买卖股票的最佳时机

这个问题可以通过一次遍历解决。在遍历过程中,我们需要记录到目前为止的最低价格,同时计算每一天可能的最大利润。如果当前价格减去记录的最低价格大于当前的最大利润,则更新最大利润。初始化最低价格为最大整数,以便在比较时能轻松更新。如果当前价格比记录的最低价格还低,更新最低价格。如果当前利润大于已记录的最大利润,更新最大利润。计算当前的潜在利润,即如果在今天卖出股票。果然超时了哈哈哈哈哈哈哈。遍历价格数组中的每个价格。返回最终计算出的最大利润。,因为不买卖股票利润为。

2025-07-10 07:33:05 269

原创 076-295 数据流中的中位数 3 hard

如果最小堆的元素多于最大堆的元素,将最小堆的堆顶元素移回最大堆。如果最大堆和最小堆的大小相同,中位数是两个堆顶元素的平均值。我是懂了,它这个最大堆和最小堆的元素加到一起是总和。如果最大堆的元素更多,中位数是最大堆的堆顶元素。/** 向数据结构中添加一个数 *//** 返回当前数据流的中位数 */思路稍微复杂一丢丢,但是代码还是极其简单的。确保最大堆中的所有元素都小于最小堆中的元素。/** 初始化数据结构 */首先将新元素添加到最大堆。最大堆,保存较小的一半。最小堆,保存较大的一半。

2025-07-10 07:32:25 644

原创 075前K个高频元素 有一些不会用的方法(KV整体)

这句代码的作用是创建一个PriorityQueue,即一个最小堆,其元素类型是Map.Entry<Integer, Integer>,并且按照Map.Entry对象中的值(即频率)进行排序。因此,PriorityQueue<Map.Entry<Integer, Integer>>声明了一个优先队列,其中的每个元素都是一个Map.Entry对象,代表一个键值对。这在寻找前K个高频元素的问题中很有用,因为我们需要不断插入新的元素到堆中,并在必要时移除堆顶的元素来保持堆的大小不超过K。统计每个元素出现的频率。

2025-07-10 07:31:46 767

原创 074-215 数组中的第K个最大元素

这种方法在处理大数组时非常高效,因为我们只需维护一个大小为k的堆,而不是对整个数组进行排序。最小堆的堆顶元素就是数组中的第。这样我们就能确保堆中只保留前。创建一个最小堆,初始容量为。,之后是可以动态扩展的。遍历数组中的每个元素。将元素添加到最小堆中。

2025-07-10 07:31:10 289

原创 ⭐*5 073柱状图中最大的矩阵(以后再看吧)

这个例子通过详细的步骤解释了如何通过单调栈有效地找到每个柱子的左右边界,并计算出最大矩形面积。在这个测试用例中,最大的矩形面积是 10,对应的柱子高度为 5 和 6,宽度为 2。当当前柱子比栈顶柱子矮时,处理栈顶柱子。如果栈为空,说明当前柱子是最矮的。定义一个栈,存放柱子的索引。计算面积并更新最大面积。特殊情况处理:空数组。将当前柱子的索引入栈。

2025-07-10 07:30:35 252

原创 072-739 每日温度 单调栈

栈中存储的是温度的索引,栈顶的温度值总是比当前的温度值低。当找到一个更高的温度时,栈中的索引出栈,并计算两个索引的差值,记录在结果中。当栈不为空且当前温度大于栈顶索引对应的温度时,小于当前温度的栈中元素都弹出。创建一个栈,用来存储温度的索引。解决这个问题的最佳方法是使用。创建一个结果数组,初始值为。计算天数差,并存入结果数组。弹出栈顶元素,得到索引。,长度与温度数组相同。

2025-07-10 07:29:59 181

原创 071-394 字符串解码 3 不是很难,要理解双端队列这个数据结构

记录此 [ 前的倍数 multi 至栈,用于发现对应 ] 后,获取 multi × [...] 字符串。cur_multi是当前 [ 到 ] 内字符串的重复倍数,例如 "3[a2[c]]" 中的 2。last_res是上个 [ 到当前 [ 的字符串,例如 "3[a2[c]]" 中的 a;空间复杂度 O(N),辅助栈在极端情况下需要线性空间,例如 2[2[2[a]]]。当 c 为数字时,将数字字符转化为数字 multi,用于后续倍数计算;创建两个栈,一个用于存储数字,一个用于存储字符串。

2025-07-10 07:29:29 816

原创 070-155 最小栈

具体来说,对于 Deque 的实现类如 LinkedList 和 ArrayDeque,peek() 可以用来查看栈顶或队列头部的元素而不移除它。在 MinStack 实现中,peek() 方法用于检查栈的当前最小值或栈顶元素。使用两个栈,一个用于存储所有元素,一个用于存储当前最小值。将当前元素与最小值栈顶元素比较,将较小值压入最小值栈。返回最小值栈顶元素,即当前栈中的最小值。将元素压入存储所有元素的栈。移除存储所有元素的栈顶元素。返回存储所有元素的栈顶元素。同时移除最小值栈顶元素。用于存储所有元素的栈。

2025-07-10 07:28:58 745

原创 069-20 有效的括号

如果栈为空,说明所有括号都匹配,否则返回。如果字符串长度为奇数,不可能是有效的。检查当前右括号是否与栈顶的左括号匹配。如果栈为空,说明没有匹配的左括号。如果是左括号,压入栈中。

2025-07-10 07:28:28 244

原创 068-004 寻找两个正序数组中的中位数 hard不易理解(难死了)

划分点 i 和 j 共同作用,需要满足一定的大小关系,即 nums1[i - 1] <= nums2[j] 且 nums2[j - 1] <= nums1[i]。这意味着左半部分的所有元素都小于等于右半部分的所有元素。,它和在数组 nums1 上的划分点 i 共同作用,以实现将两个数组合并后的整体进行合理划分,使得划分后的左右两部分满足特定的数量和大小关系。如果总长度是偶数,中位数是左边部分的最大值和右边部分的最小值的平均值。为偶数,中位数就是左半部分的最大值和右半部分的最小值的平均值,即。

2025-07-10 07:27:57 725

原创 067-153 寻找旋转排序数组中的最小值

不对,突然感觉好像更简单一些。确实,这是上一题的一小步而已。还是要找到排序的分开的位置。这个题和066是很像的。

2025-07-10 07:27:25 86

原创 066-033 搜索旋转排序数组

findMin 函数用于在一个旋转排序数组中找到最小元素的索引。旋转排序数组是指一个有序数组在某个点进行了旋转,比如 [4, 5, 6, 7, 0, 1, 2]。该函数利用二分查找法,通过比较中间元素和数组末尾元素的大小来缩小搜索范围,从而找到最小值。旋转排序数组的特点是数组本来是有序的,但是经过了一定的旋转,这题好不迷惑,你要是说找target的旋转前的下标我还认为还行,但是这个直接一个二分查找,旋转的意义是啥嘞。// 目标值在左半部分。使得数组的一部分处于原数组的后半部分,而另一部分则处于前半部分。

2025-07-10 07:25:24 636

原创 065-034 在排序数组中查找元素的第一个和最后一个位置

我的狮山代码,但终究是有自己的想法的,自己的孩子,注入心血,再差也要培养!我的思路是先找到一个target,然后再向左右去找左右的边界位置。这题目有点没看懂啊,啊,我懂了嗯,但是这个用二分嘛。先用二分找到,目标值,再从目标值向两边扩散。而gpt还是用了两次二分查找。我觉得还是我的更好一点。

2025-07-09 07:58:33 278

原创 064-074 搜索二维矩阵

在 while 循环中,计算中间位置 mid,并将其映射到二维矩阵中的位置 matrix[mid / cols][mid % cols]。2.先从中间找,if(小于首数){i-1}else if(大于尾数){i+1}else{return false}进行二分查找,时间复杂度为 O(log(m * n)),空间复杂度为 O(1),是一种高效的解决方案。因为是二分查找的题目,所以我们按照二分的思想来考虑。1.读取二维数组的行和列 int m,n。这一行没找到并且数值在这一行间。修正,每一次换行要重置。

2025-07-09 07:57:59 511

原创 063-035 搜索插入位置

题目我的思考classSolutionprivateintlowerBoundint[]numsinttarget){intleft0,right =numslength1;whileintmid2;if1;else1;returnleft;publicintint[]numsinttarget) {returnlowerBound题解题解思路遇到的问题分析学习到的知识点。

2025-07-09 07:57:29 186

原创 062-051 N皇后 其实不难(回溯要常复习,要熟练)

1.从第一行开始,选择一个位置Q皇后入位,把它的横竖斜都标记为不可用 . ,里面的哦,因为只有当前皇后放置可以了才会进行下一行和回溯哦。度对角线(左上到当前位置,因为下面还没放置皇后)将字符数组转换为字符串加入列表。如果当前位置可以放置皇后,返回。尝试在当前行的每一列放置皇后。检查当前位置是否可以放置皇后。2.逐行尝试,直到最后一行。个皇后,保存当前棋盘的状态。度对角线(右上到当前位置)终止是已经放置了皇后的。将棋盘数组转换为列表。

2025-07-09 07:56:56 1177

原创 061-131 分割回文串 3

回溯的核心在于探索所有可能的分割方案,并在发现不符合条件的方案时回退(即“回溯”),尝试其他方案。回溯,移除当前子串,这里还是很迷惑。,返回所有可能的回文分割方案。这咋弄,一点点思路都没有哦。如果已经处理到字符串末尾。当左右指针相遇时结束循环。遍历所有可能的结束位置。将当前路径加入结果集。

2025-07-09 07:56:06 899

原创 060-079 单词搜索(矩阵 图论 dfs 回溯)

2.标记记录的字母,一个同样的二维数组?如何决定dfs应该深入下一个?从每个元素开始进行深度优先搜索。检查边界条件和当前字符是否匹配。如果没有找到匹配的路径,返回。主函数,判断在二维字符数组。暂时将当前字符标记为已访问。深度优先搜索函数,检查从。如果所有字符都匹配,返回。1.找到可能的起始位置。遍历二维数组的每个元素。将单词转换成字符数组。

2025-07-08 07:29:31 460

原创 059-022 括号生成(匹配) 2

每次递归调用都会尝试在当前路径上放置一个括号(左括号或右括号),并在放置完之后继续递归调用以完成括号组合的构建。当递归调用返回时,代码会自动回到之前的状态,继续尝试其他可能的括号放置方式,这就是回溯的本质。根据当前已经放置的左括号和右括号的数量,决定下一步放置左括号还是右括号。如果当前右括号的数量小于左括号的数量,则可以放置右括号。如果当前右括号的数量小于左括号的数量,则可以放置右括号。初始化字符数组,用于存储当前构建的括号组合,长度为。初始化字符数组,用于存储当前构建的括号组合,长度为。

2025-07-08 07:28:59 583

原创 058-039 组合总和

就对于candidates的遍历来讲,如何遍历到下一个整数?CPP 个人更喜欢CPP版本。:允许重复选用,不跳过同层重复,,不用手动回溯,这就是在参数中写。了,表示可以重复读取当前的数。【关键】每次调用前都清空。【关键】每次调用前都清空。:下一个可选的起始索引。:候选数组(已排序),则加上下面两行去重。每一层递归都有自己的。

2025-07-08 07:27:57 831

原创 057-017 电话号码的字母组合

数字和字母映射,数组和hashmap都可以。每个数字对应几个字母,然后回溯就好啦。一个键对应几个值,哈希链表。应该使用hashmap。结果数组,元素是字符串。

2025-07-08 07:27:20 283

计算机笔试常用api总结

计算机笔试常用api总结

2025-07-14

Redis-insight

redis可视化

2025-07-14

空空如也

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

TA关注的人

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