- 博客(32)
- 资源 (2)
- 收藏
- 关注
原创 [Java恶补day14] 56. 合并区间
题目要求合并重叠的区间数组。思路是先对区间按左端点排序,然后遍历每个区间,判断是否与结果列表中的最后一个区间重叠。若重叠则合并右端点,否则直接加入结果列表。时间复杂度为O(nlogn),主要用于排序。示例展示了合并[1,3]和[2,6]为[1,6]的过程。Java实现通过排序后逐个处理区间,使用ArrayList存储结果,最后转为数组返回。
2025-06-03 22:42:49
420
原创 [Java恶补day13] 53. 最大子数组和
本文介绍了求解最大子数组和的算法。题目要求找出数组中连续子数组的最大和(至少包含一个元素)。由于数组可能包含负数,无法使用滑动窗口,转而采用前缀和方法。通过维护当前前缀和和最小前缀和,在遍历数组时动态计算最大差值。关键步骤:更新当前前缀和→计算差值→更新最小前缀和。时间复杂度O(n),空间复杂度O(1)。示例代码使用Java实现,参考了灵神的解法。
2025-06-02 22:28:05
578
原创 [Java恶补day12] 不刷题,整理模板
文章介绍了两个经典的双指针算法问题。11.盛最多水容器使用相向双指针,计算最大容积时移动较矮的指针,时间复杂度O(n)。42.接雨水提供了两种解法:方法1使用前缀/后缀数组存储最大高度,方法2优化为双指针边移动边更新最大值,空间复杂度优化至O(1)。两种解法均基于木桶原理,通过计算左右最大高度的较小值来确定每个位置的储水量,体现了双指针在空间优化中的高效性。
2025-05-31 15:34:46
869
原创 [Java恶补day11] 不刷题,整理模板
摘要 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
873
原创 [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
865
原创 [Java恶补day9] 438.找到字符串中所有字母异位词
本文介绍了一种使用定长滑动窗口寻找字符串中所有异位词子串的算法。通过统计字符出现次数来判断是否为异位词,具体实现步骤如下:1)比较字符串s和p的长度;2)统计p中各字符出现次数;3)使用滑动窗口遍历s,维护窗口内字符计数;4)当窗口大小等于p长度时,比较两个字符计数数组,若相同则记录起始位置。该算法时间复杂度为O(∣Σ∣m),空间复杂度O(∣Σ∣),适合处理包含小写字母的字符串。示例展示了算法在"cbaebabacd"和"abab"上的应用。
2025-05-28 20:40:47
668
原创 [Java恶补day8] 3. 无重复字符的最长子串
摘要: 本文介绍了一种寻找字符串中最长无重复字符子串的滑动窗口算法。通过维护一个哈希表记录字符位置,动态调整窗口边界来处理重复字符。当遇到重复字符时,若其在当前窗口内则移动窗口左边界,否则保留窗口。算法遍历字符串时持续更新最大子串长度,时间复杂度为O(n)。测试用例表明该方法能正确识别最长无重复子串。该解法有效利用了滑动窗口和哈希表的特点,适用于各种字符组成的字符串。
2025-05-27 20:46:42
452
原创 [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
570
原创 [Java恶补day6] 15. 三数之和
这篇题解要求找出数组中所有不重复的三元组,使其和为0。核心思路是对数组排序后使用双指针法:固定第一个数,将问题转化为在两数之和中使用双指针查找另外两个数。通过排序确保结果不重复,并在遍历时跳过重复元素。时间复杂度为O(n²),空间复杂度为O(n)。
2025-05-25 22:37:50
728
原创 [Java恶补day5] 11. 盛最多水的容器
这篇文章探讨了如何计算由两条垂直线与x轴构成的容器的最大储水量。使用双指针法,从数组两端向中间移动,每次计算当前两条线构成的容器容积(最短线高度×线间距),并更新最大值。指针移动策略是:每次移动较短线对应的指针,以寻求更大的容积可能。这种方法的时间复杂度为O(n),空间复杂度为O(1)。示例展示了算法的具体应用和正确性验证。
2025-05-24 22:57:23
335
原创 [Java恶补day4] 283. 移动零
该问题要求将数组中的所有0移动到末尾,同时保持非零元素的相对顺序,并且必须原地操作。解决方案采用双指针法,左指针指向0,右指针指向非零元素。通过交换左右指针的元素,实现0的移动。具体分为三种情况:1)左指针指向0,右指针指向非零元素时,交换两者;2)双指针均指向0时,右指针后移;3)左指针指向非零元素时,双指针同时后移。循环结束条件为右指针等于数组长度。该方法确保了操作次数的最小化,且无需复制数组。
2025-05-23 19:46:21
340
原创 [Java恶补day3] 128. 最长连续序列
本文介绍了一种在未排序整数数组中寻找最长连续序列长度的高效算法。该算法通过使用HashMap存储数组元素,避免了重复遍历,并确保时间复杂度为O(n)。核心思想是找到每个连续序列的开头,然后通过while循环找到该序列的结尾,从而计算出序列的长度。最终,通过比较所有序列的长度,返回最长的序列长度。该算法在空间复杂度上为O(n),适用于处理大规模数据。
2025-05-22 22:38:27
703
原创 [Java恶补day2] 49. 字母异位词分组
本文介绍了一种将字母异位词分组的方法。字母异位词是指由相同字母重新排列组成的单词。通过将每个字符串的字母排序,可以将具有相同字母异位词的字符串归类到同一组。具体实现使用哈希表,键为排序后的字符串,值为原始字符串列表。算法的时间复杂度为O(nk logk),空间复杂度为O(nk),其中n为字符串数量,k为字符串中最大字母数。最终返回分组后的字符串列表。
2025-05-21 21:43:39
315
原创 [Java恶补day1] 1. 两数之和
本文介绍了在整数数组中找到两个数,使其和等于目标值的三种解法。第一种解法使用嵌套循环,时间复杂度为O(n^2),通过遍历数组中的每一对元素来寻找符合条件的组合。第二种解法优化了循环结构,减少了不必要的遍历,但仍保持O(n^2)的时间复杂度。第三种解法利用哈希表(查找表法),将时间复杂度降低到O(n),通过存储已遍历的元素及其索引,快速查找是否存在与当前元素配对的数。这三种方法分别展示了从简单到高效的算法优化过程,适用于不同场景下的需求。
2025-05-20 11:31:49
239
原创 LPSolver使用Q&A
【解决方法】检查一下该lp文件所在目录的路径名是否包含非法字符(如⭐等),如有,则删除这些非法字符,即可正常保存和显示文件的内容。
2024-10-12 09:47:25
260
原创 Anaconda3-2019.10安装tensorflow2.0.0过程记录
Anaconda2019.10安装tensorflow2.0.0记录
2023-12-16 15:09:11
727
4
原创 Anaconda3-4.2.0安装tensorflow1.X过程记录
如何正确在anaconda中安装tensorflow1.X版本(个人记录)
2023-12-13 18:56:29
712
1
原创 Android原生+Spring Boot+Vue3项目实战
作为前后端分离的项目,如何在Android原生,Spring Boot,Vue中找到奥秘呢?
2023-06-06 14:32:59
400
Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.zip
2020-03-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人