- 博客(41)
- 资源 (2)
- 收藏
- 关注
原创 [Java恶补day23] 35. 搜索插入位置
本文通过二分查找算法在有序数组中定位目标值的位置或应插入的位置。算法时间复杂度为O(log n),空间复杂度为O(1)。当目标值存在时返回其索引,否则返回按顺序插入的位置。示例分析展示了查找过程和边界条件处理。核心代码实现二分查找逻辑,并讨论了插入操作的辅助数组实现方法(但题目不要求实际插入)。该解法高效处理了有序数组的搜索定位问题。
2025-06-12 21:44:14
393
原创 [Java恶补day22] 240. 搜索二维矩阵Ⅱ
该算法解决在行列均有序的二维矩阵中搜索目标值的问题。从矩阵右上角开始搜索,通过与目标值比较动态调整行列指针:若当前元素等于目标值则返回true;若小于目标值则向下移动行指针;若大于目标值则向左移动列指针。这种方法的时间复杂度为O(m+n),空间复杂度为O(1)。以测试用例为例演示了搜索过程,确保在最优路径上快速定位目标值或确认其不存在。
2025-06-11 21:39:32
674
原创 [Java恶补day21] 48. 旋转图像
本文介绍了如何原地旋转n×n矩阵90度。核心思路是:先转置矩阵(行列互换),然后水平翻转每行。这种方法通过两次遍历实现,时间复杂度O(n²),空间复杂度O(1)。示例展示了具体操作步骤,Java代码演示了转置和行翻转的实现。该方法巧妙利用数学变换避免了额外空间的使用,是典型的原地算法应用。
2025-06-10 20:03:21
663
原创 [Java恶补day20] 54. 螺旋矩阵
本文介绍了一种顺时针螺旋遍历二维矩阵的算法。算法通过定义四个边界(top、right、bottom、left)来标记当前遍历范围,在循环中依次执行右、下、左、上四个方向的遍历,每次遍历后更新相应边界并检查是否完成遍历。该方法时间复杂度为O(mn),空间复杂度为O(1),适用于任意m×n矩阵。文中给出了示例分析、算法思路、Java实现代码以及复杂度分析,并附有图解说明遍历过程。该算法简洁高效,是解决螺旋矩阵遍历问题的经典方法。
2025-06-09 21:30:33
511
原创 [Java恶补day19] 73. 矩阵置零
题目要求当矩阵元素为0时,将其所在行和列都置为0。解法1使用标记数组记录含0的行和列,时间复杂度O(mn),空间复杂度O(m+n)。具体步骤:1)遍历矩阵标记含0的行列;2)再次遍历矩阵,根据标记置0。示例显示输入[[1,1,1],[1,0,1],[1,1,1]]输出[[1,0,1],[0,0,0],[1,0,1]]。该解法简单高效,适合大多数场景。
2025-06-08 21:05:55
748
原创 [Java恶补day17] 41. 缺失的第一个正数
题目要求在未排序的整数数组中找到未出现的最小正整数,要求时间复杂度O(n)且空间复杂度O(1)。采用将元素交换到正确位置的方法:遍历数组,若元素值∈[1,n]且不在对应位置(即nums[i]≠nums[nums[i]-1]),则进行交换。最后遍历数组,返回第一个位置编号与元素值不匹配的位置编号(i+1)。若所有元素位置正确,则返回n+1。该方法通过原地交换避免了额外空间,确保了线性时间复杂度。
2025-06-06 21:36:08
1062
原创 [Java恶补day16] 238.除自身以外数组的乘积
题目要求计算数组中每个元素除自身外的乘积,限制条件是不使用除法且时间复杂度为O(n)。解法1使用两个辅助数组分别存储前缀和后缀乘积,最终相乘得到结果,空间复杂度O(n)。解法2优化空间,仅使用一个数组存储后缀乘积,同时用变量动态维护前缀乘积,边计算边更新结果,空间复杂度降至O(1)。两种方法均满足时间要求,示例验证了正确性。 关键词: 数组、乘积、前缀、后缀、空间优化
2025-06-05 21:05:11
904
原创 [Java恶补day15] 189. 轮转数组
本文介绍了解决数组向右轮转k个位置的三种方法:错误的双指针法、额外数组法和数组翻转法。指出双指针法因时间复杂度高而无法通过测试,额外数组法通过三次循环实现轮转,而最优解法是数组翻转法,通过三次数组翻转(整体、前k个元素和后n-k个元素)实现原地操作。三种方法的时间复杂度均为O(n),但翻转法的空间复杂度最低(O(1))。附代码实现及图解说明,参考了灵神和官方题解。
2025-06-04 21:34:53
436
原创 [Java恶补day14] 56. 合并区间
题目要求合并重叠的区间数组。思路是先对区间按左端点排序,然后遍历每个区间,判断是否与结果列表中的最后一个区间重叠。若重叠则合并右端点,否则直接加入结果列表。时间复杂度为O(nlogn),主要用于排序。示例展示了合并[1,3]和[2,6]为[1,6]的过程。Java实现通过排序后逐个处理区间,使用ArrayList存储结果,最后转为数组返回。
2025-06-03 22:42:49
892
原创 [Java恶补day13] 53. 最大子数组和
本文介绍了求解最大子数组和的算法。题目要求找出数组中连续子数组的最大和(至少包含一个元素)。由于数组可能包含负数,无法使用滑动窗口,转而采用前缀和方法。通过维护当前前缀和和最小前缀和,在遍历数组时动态计算最大差值。关键步骤:更新当前前缀和→计算差值→更新最小前缀和。时间复杂度O(n),空间复杂度O(1)。示例代码使用Java实现,参考了灵神的解法。
2025-06-02 22:28:05
717
原创 [Java恶补day12] 整理模板·考点一【相向双指针】(2)
文章介绍了两个经典的双指针算法问题。11.盛最多水容器使用相向双指针,计算最大容积时移动较矮的指针,时间复杂度O(n)。42.接雨水提供了两种解法:方法1使用前缀/后缀数组存储最大高度,方法2优化为双指针边移动边更新最大值,空间复杂度优化至O(1)。两种解法均基于木桶原理,通过计算左右最大高度的较小值来确定每个位置的储水量,体现了双指针在空间优化中的高效性。
2025-05-31 15:34:46
880
原创 [Java恶补day11] 整理模板·考点一【相向双指针】(1)
167.两数之和II和15.三数之和都采用了双指针技术解决有序数组的求和问题。 167题通过左右指针相向移动,在已排序数组中高效寻找两数之和等于目标值。当sum小于target时右移左指针,sum大于target时左移右指针。时间复杂度O(n),空间O(1)。 15题在固定第一个数后,用双指针寻找另外两个数,使三数之和为0。关键是通过排序和跳过重复元素来避免重复解,同时利用提前判断优化效率。时间复杂度O(n^2),空间O(1)。 两题都利用了数组有序的特性,通过指针移动策略有效缩小搜索范围,避免暴力解。
2025-05-30 21:25:04
881
原创 [Java恶补day10] 560. 和为K的子数组
摘要:本文介绍了使用前缀和和哈希表高效统计数组中连续子数组和为k的方法。通过计算前缀和sum[i](sum[0]=0),在遍历时用哈希表记录各前缀和出现次数,当sum[j]-k存在于哈希表时,说明存在符合条件的子数组。该方法将时间复杂度优化至O(n),空间复杂度O(n),避免了O(n^2)的暴力解法。示例展示了具体计算过程,并通过Java代码实现。参考灵神解析提供了更深入的数学原理。
2025-05-29 22:39:10
874
原创 [Java恶补day9] 438.找到字符串中所有字母异位词
本文介绍了一种使用定长滑动窗口寻找字符串中所有异位词子串的算法。通过统计字符出现次数来判断是否为异位词,具体实现步骤如下:1)比较字符串s和p的长度;2)统计p中各字符出现次数;3)使用滑动窗口遍历s,维护窗口内字符计数;4)当窗口大小等于p长度时,比较两个字符计数数组,若相同则记录起始位置。该算法时间复杂度为O(∣Σ∣m),空间复杂度O(∣Σ∣),适合处理包含小写字母的字符串。示例展示了算法在"cbaebabacd"和"abab"上的应用。
2025-05-28 20:40:47
679
原创 [Java恶补day8] 3. 无重复字符的最长子串(已归档)
本文介绍了一种寻找字符串中最长无重复字符子串的滑动窗口算法。通过维护一个哈希表记录字符位置,动态调整窗口边界来处理重复字符。当遇到重复字符时,若其在当前窗口内则移动窗口左边界,否则保留窗口。算法遍历字符串时持续更新最大子串长度,时间复杂度为O(n)。测试用例表明该方法能正确识别最长无重复子串。该解法有效利用了滑动窗口和哈希表的特点,适用于各种字符组成的字符串。
2025-05-27 20:46:42
457
原创 [Java恶补day7] 42. 接雨水(已归档)
该问题要求在给定高度数组表示的柱子图中,计算能接住的雨水总量。使用双指针法,从数组两端向中间遍历,维护左右两侧的最大高度lMax和rMax。每次迭代中,较小的一侧决定当前柱子的积水量(max - height[p]),并移动对应指针。时间复杂度为$O(n)$,空间复杂度$O(1)$。示例1输入[0,1,0,2,1,0,1,3,2,1,2,1]输出6,示例2输入[4,2,0,3,2,5]输出9。
2025-05-26 21:23:24
573
原创 [Java恶补day6] 15. 三数之和(已归档)
这篇题解要求找出数组中所有不重复的三元组,使其和为0。核心思路是对数组排序后使用双指针法:固定第一个数,将问题转化为在两数之和中使用双指针查找另外两个数。通过排序确保结果不重复,并在遍历时跳过重复元素。时间复杂度为O(n²),空间复杂度为O(n)。
2025-05-25 22:37:50
735
原创 [Java恶补day5] 11. 盛最多水的容器(已归档)
这篇文章探讨了如何计算由两条垂直线与x轴构成的容器的最大储水量。使用双指针法,从数组两端向中间移动,每次计算当前两条线构成的容器容积(最短线高度×线间距),并更新最大值。指针移动策略是:每次移动较短线对应的指针,以寻求更大的容积可能。这种方法的时间复杂度为O(n),空间复杂度为O(1)。示例展示了算法的具体应用和正确性验证。
2025-05-24 22:57:23
340
原创 [Java恶补day4] 283. 移动零
该问题要求将数组中的所有0移动到末尾,同时保持非零元素的相对顺序,并且必须原地操作。解决方案采用双指针法,左指针指向0,右指针指向非零元素。通过交换左右指针的元素,实现0的移动。具体分为三种情况:1)左指针指向0,右指针指向非零元素时,交换两者;2)双指针均指向0时,右指针后移;3)左指针指向非零元素时,双指针同时后移。循环结束条件为右指针等于数组长度。该方法确保了操作次数的最小化,且无需复制数组。
2025-05-23 19:46:21
345
原创 [Java恶补day3] 128. 最长连续序列
本文介绍了一种在未排序整数数组中寻找最长连续序列长度的高效算法。该算法通过使用HashMap存储数组元素,避免了重复遍历,并确保时间复杂度为O(n)。核心思想是找到每个连续序列的开头,然后通过while循环找到该序列的结尾,从而计算出序列的长度。最终,通过比较所有序列的长度,返回最长的序列长度。该算法在空间复杂度上为O(n),适用于处理大规模数据。
2025-05-22 22:38:27
705
原创 [Java恶补day2] 49. 字母异位词分组
本文介绍了一种将字母异位词分组的方法。字母异位词是指由相同字母重新排列组成的单词。通过将每个字符串的字母排序,可以将具有相同字母异位词的字符串归类到同一组。具体实现使用哈希表,键为排序后的字符串,值为原始字符串列表。算法的时间复杂度为O(nk logk),空间复杂度为O(nk),其中n为字符串数量,k为字符串中最大字母数。最终返回分组后的字符串列表。
2025-05-21 21:43:39
319
原创 [Java恶补day1] 1. 两数之和
本文介绍了在整数数组中找到两个数,使其和等于目标值的三种解法。第一种解法使用嵌套循环,时间复杂度为O(n^2),通过遍历数组中的每一对元素来寻找符合条件的组合。第二种解法优化了循环结构,减少了不必要的遍历,但仍保持O(n^2)的时间复杂度。第三种解法利用哈希表(查找表法),将时间复杂度降低到O(n),通过存储已遍历的元素及其索引,快速查找是否存在与当前元素配对的数。这三种方法分别展示了从简单到高效的算法优化过程,适用于不同场景下的需求。
2025-05-20 11:31:49
246
原创 LPSolver使用Q&A
【解决方法】检查一下该lp文件所在目录的路径名是否包含非法字符(如⭐等),如有,则删除这些非法字符,即可正常保存和显示文件的内容。
2024-10-12 09:47:25
264
原创 Anaconda3-2019.10安装tensorflow2.0.0过程记录
Anaconda2019.10安装tensorflow2.0.0记录
2023-12-16 15:09:11
734
4
原创 Anaconda3-4.2.0安装tensorflow1.X过程记录
如何正确在anaconda中安装tensorflow1.X版本(个人记录)
2023-12-13 18:56:29
719
1
原创 Android原生+Spring Boot+Vue3项目实战
作为前后端分离的项目,如何在Android原生,Spring Boot,Vue中找到奥秘呢?
2023-06-06 14:32:59
412
Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.zip
2020-03-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人