自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 189. 轮转数组[中等]✅

观察下反转以后的元素的分布。,将数组中的元素向右轮转。就可以得到轮转后的结果。空间复杂度:O(1)。

2026-08-29 13:01:29 221

原创 56. 合并区间[中等]✅

先按照区间左端点排序,排序后,只需要比较当前区间和上一个合并区间的关系,重叠就合并,不重叠就保存。已合并区间的右端点,说明有重叠,合并区间并更新右端点。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。如果没有重叠,说明是新的区间,直接加入答案。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。按照区间左端点从小到大排序。

2026-08-29 13:00:16 392

原创 53. 最大子数组和[中等]✅

请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。维护当前连续子数组的最大和,如果之前的和没有贡献,就重新开始。,说明前面的和会拖累结果,从当前元素重新开始。,说明前面的子数组有价值,继续累加当前元素。表示当前连续子数组的最大和。是数组中的一个连续部分。

2026-08-28 23:25:48 376

原创 76. 最小覆盖子串[困难]✅

中重复字符,我们寻找的子字符串中该字符数量必须不少于。满足条件后,左指针不断右移,缩小窗口,更新最小答案。的所有字符,然后不断缩小窗口,找到最短长度。中存在这样的子串,我们保证它是唯一的答案。的子串 BANC 中每个字母的出现次数,都。右指针移动,不断加入字符,直到窗口满足覆盖。=ABC 中每个字母的出现次数,这就叫。所有字符的子串,则返回空字符串。所有字符的最小子串。维护一个窗口,使窗口内包含。最后返回记录的最小窗口。中每个字符出现次数。

2026-08-28 23:24:43 342

原创 56. 合并区间[中等]✅

先按照区间左端点排序,排序后,只需要比较当前区间和上一个合并区间的关系,重叠就合并,不重叠就保存。已合并区间的右端点,说明有重叠,合并区间并更新右端点。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。如果没有重叠,说明是新的区间,直接加入答案。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。按照区间左端点从小到大排序。

2026-08-27 23:54:08 210

原创 53. 最大子数组和[中等]✅

请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。维护当前连续子数组的最大和,如果之前的和没有贡献,就重新开始。,说明前面的和会拖累结果,从当前元素重新开始。,说明前面的子数组有价值,继续累加当前元素。表示当前连续子数组的最大和。是数组中的一个连续部分。

2026-08-27 23:53:03 248

原创 76. 最小覆盖子串[困难]✅

中重复字符,我们寻找的子字符串中该字符数量必须不少于。满足条件后,左指针不断右移,缩小窗口,更新最小答案。的所有字符,然后不断缩小窗口,找到最短长度。中存在这样的子串,我们保证它是唯一的答案。的子串 BANC 中每个字母的出现次数,都。右指针移动,不断加入字符,直到窗口满足覆盖。=ABC 中每个字母的出现次数,这就叫。所有字符的子串,则返回空字符串。所有字符的最小子串。维护一个窗口,使窗口内包含。最后返回记录的最小窗口。中每个字符出现次数。

2026-08-26 23:59:04 217

原创 239. 滑动窗口最大值[困难]✅

的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。新元素进入窗口前,删除队尾所有比它小的元素,保证队列递减。滑动窗口每次只向右移动一位。当窗口形成后,队首元素就是当前窗口最大值。,队首永远保存当前窗口的最大值下标。如果队首元素已经离开窗口,移除队首。将当前元素下标加入队尾。

2026-08-26 23:58:00 288

原创 560. 和为 K 的子数组[中等]✅

表示还没有遍历元素时,前缀和为 0 出现一次。是否存在,存在则说明找到满足条件的子数组。子数组是数组中元素的连续非空序列。,那么两者之间的子数组和就是。value:该前缀和出现次数。将当前前缀和加入哈希表。,之前存在一个前缀和。

2026-08-25 23:59:53 691

原创 438. 找到字符串中所有字母异位词[中等]✅

的子串,返回这些子串的起始索引。不考虑答案输出的顺序。右指针移动,新字符加入窗口。窗口向右移动,移除左端字符。如果一致,记录窗口左端点。中每个字符出现次数。比较窗口中字符次数和。

2026-08-25 23:58:17 211

原创 3. 无重复字符的最长子串[中等]✅

摘要:题目要求找出字符串中不包含重复字符的最长子串长度。采用滑动窗口结合哈希集合的解法:维护左右指针表示窗口范围,右指针不断扩展并将字符加入集合,若遇到重复字符则移动左指针缩小窗口直至无重复。每次更新窗口长度并记录最大值。该算法时间复杂度O(n),空间复杂度O(n)。核心代码使用HashSet存储窗口字符,通过比较和移除操作确保窗口唯一性,最终返回最大长度值。

2026-08-22 19:49:26 190

原创 42. 接雨水[困难]✅

摘要:接雨水问题要求计算柱子高度图中能接住的雨水量。采用双指针+贪心策略,左右指针分别从两端向中间移动,维护左右两侧的最大高度。每次比较左右最大高度,较小者决定当前位置的接水量,并移动对应指针。时间复杂度O(n),空间复杂度O(1)。核心公式:水量=min(左最大,右最大)-当前高度。代码通过动态更新前缀和后缀最大值,逐步累加接水量,高效解决问题。

2026-08-22 19:48:00 205

原创 15. 三数之和[中等]✅

先排序,固定一个数,再用左右指针寻找另外两个数,使三数之和为。答案中不可以包含重复的三元组。时加入答案,并跳过重复元素。先对数组排序,并跳过重复的。,判断是否存在三元组。

2026-08-22 19:46:27 577

原创 11. 盛最多水的容器[中等]✅

决定,移动较短的一边,才可能找到更大的面积。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。定义左右指针,分别指向数组两端。返回容器可以储存的最大水量。

2026-08-21 21:41:37 579

原创 283. 移动零[简单]✅

摘要: 题目要求将数组中的所有零移动到末尾,同时保持非零元素的相对顺序,且需原地操作。采用双指针法:指针i遍历数组寻找非零元素,指针i0标记非零元素的插入位置。当i遇到非零值时,与i0交换并后移i0,确保非零元素按序前移,零自然移至末尾。算法时间复杂度O(n),空间复杂度O(1)。示例代码通过交换元素实现,简洁高效。

2026-08-21 21:39:01 293

原创 128. 最长连续序列[中等]✅

摘要: 题目要求在未排序数组nums中找出最长连续数字序列的长度,要求时间复杂度为O(n)。核心思路:利用哈希集合(HashSet)存储所有数字,确保O(1)查询。遍历集合时,仅当某数字x的前驱x-1不存在时(即x为序列起点),才向后扩展统计连续序列长度(x+1, x+2...),避免重复计算。最终返回最大长度。代码实现:先将数组转为哈希集合,遍历时跳过非起点数字,对起点数字向后查询连续值,更新最大值。复杂度:时间O(n),空间O(n)。 参考视频:B站讲解。

2026-08-20 23:33:26 244

原创 49. 字母异位词分组[中等]✅

题目要求将字符串数组中的字母异位词分组。字母异位词指字母相同但顺序不同的词。解法核心是利用哈希表,以排序后的字符串作为键,相同键的词归为一组。具体实现是将每个字符串排序后作为哈希表的键,原始字符串存入对应值的列表中,最后返回所有分组。该方法时间复杂度主要取决于排序部分,总体高效简洁。

2026-08-20 23:30:08 239

原创 1. 两数之和[简单]✅

两数之和问题要求在数组中找到和为给定目标值的两个数。暴力解法时间复杂度为O(n²),而利用哈希表可将复杂度降至O(n)。具体步骤:遍历数组时,用哈希表存储已访问元素(key为数值,value为下标),每次检查是否存在target - nums[i]的键。若存在则返回两数下标,否则将当前元素存入哈希表。该方法只需一次遍历,显著提高效率。示例代码使用Java的HashMap实现该算法。

2026-08-19 11:09:53 347

原创 ACM 模式 VS 核心代码模式 VS 一片空白模式

算法笔试与面试中常见的三种代码模式解析:1. 核心代码模式(如LeetCode):仅需实现核心函数逻辑,无需处理输入输出;2. ACM模式(笔试常见):需要自行处理标准输入输出,掌握Scanner读取即可;3. 空白模式(面试重点):从导包到数据结构定义全部手写,需熟练掌握链表/二叉树的类定义、构造函数及测试用例编写。建议日常以核心模式练习为主,笔试前熟悉ACM输入输出,面试重点准备空白模式的完整代码框架,包括自定义数据结构和测试验证方法。

2026-08-19 11:05:02 390

原创 循环高级~

本文介绍了Java编程中的几个核心概念:1)无限循环的三种写法(for/while/do-while)及注意事项;2)跳转控制语句break和continue的用法区别;3)Random类生成随机数的方法;4)通过"逢七过"游戏演示循环与条件判断的结合;5)计算整数平方根的算法;6)判断质数的实现逻辑;7)猜数字游戏的完整实现,包含随机数生成、循环猜测和保底机制。这些内容涵盖了Java基础语法中的循环结构、条件控制、随机数应用等核心知识点,通过具体示例展示了编程逻辑的实现方式。

2026-06-18 17:24:16 268

原创 数组的精妙

本文系统介绍了Java数组的核心概念与应用。主要内容包括:1)数组定义与数据类型限制;2)两种初始化方式(静态/动态)及使用场景;3)数组元素访问与遍历方法;4)常见问题如索引越界;5)多维数组(二维)的初始化和遍历。通过11个典型练习(求和、统计、最值、交换数据等)演示数组操作,并附内存原理图示。特别强调数组长度不可变、索引从0开始等特性,以及数据类型一致性要求。最后通过二维数组案例展示季度营业额统计的实际应用。

2026-06-18 17:23:34 251

原创 判断和循环

本文介绍了Java中的流程控制语句,主要包括顺序结构、判断结构(if、switch)和循环结构(for、while、do...while)。顺序结构按代码顺序执行;if语句用于条件判断,包括单分支、双分支和多分支结构;switch语句适用于有限个明确值的匹配场景。循环结构中,for循环适合已知循环次数,while循环适合未知次数但已知结束条件的情况,do...while循环先执行后判断。文章通过多个示例演示了如何运用这些结构解决实际问题,如考试成绩判断、星期活动安排和求和计算等。

2026-06-17 17:43:59 306

原创 运算符的精妙

本文介绍了Java中的运算符和表达式,包括算术运算符、赋值运算符、关系运算符、逻辑运算符和三元运算符等。其中详细讲解了算术运算符的使用规则和注意事项,如整数相除结果只能得到整除,小数参与运算可能不精确等。还介绍了隐式转换和强制转换的概念及区别,以及字符串拼接操作的技巧。此外,文章还涵盖了自增自减运算符、扩展赋值运算符、短路逻辑运算符等内容,并通过多个案例演示了各种运算符的实际应用。最后简单提及了运算符优先级和原码、反码、补码等拓展知识。

2026-06-17 17:43:07 202

原创 Java入门

本文主要介绍了Windows系统下的CMD命令行操作和Java编程基础。在CMD部分,详细说明了打开方式、常用命令(如盘符切换、目录操作等)、环境变量配置方法以及注意事项。Java部分涵盖了JDK安装、HelloWorld案例编写与运行、常见错误分析、环境变量配置原理、Notepad++使用技巧,以及Java版本发展、三大平台(SE/ME/EE)、跨平台特性等核心概念。特别强调了Java区分大小写、符号需英文格式等语法细节,并指出JDK已包含JRE和JVM,只需安装JDK即可进行开发。全文通过具体操作示例和

2026-06-16 14:47:41 298

原创 IDEA基础配置

本文介绍了IntelliJ IDEA的常用设置优化方法:1)通过Setting菜单可修改主题颜色、字体大小(Editor→Font)及注释颜色(单行注释设为#18820E,多行注释保留历史设置);2)在AutoImport中勾选选项实现自动导包;3)关闭CodeCompletion的MatchCase选项使代码提示忽略大小写;4)在Appearance设置中添加背景图片并调整透明度(Opacity值控制清晰度)。这些操作能有效提升开发体验。

2026-06-16 14:45:24 543

原创 287. 寻找重复数

中等给定一个包含n + 1个整数的数组nums,其数字都在[1, n]范围内(包括1和n),可知至少存在一个重复的整数。假设nums只有,返回。你设计的解决方案必须数组nums且只用常量级O(1)的额外空间。

2026-03-19 22:34:37 570

原创 31. 下一个排列

31. 下一个排列中等整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。给你一个整数数组 ,找出 的下一个排列。必须原地修改,只允许使用额外常数空间。示例 1:示例 2:示例 3:提示:题意描

2026-03-19 22:33:48 811

原创 75. 颜色分类

千层饼刷漆法:默认先把当前位置刷成蓝色 (2);如果发现是白色或红色,就往前回溯刷一层白色 (1);如果发现是红色,再往更前回溯刷一层红色 (0)。逻辑:所有的 0 肯定在 1 前面,所有的 1 肯定在 2 前面。操作遇到任何数:先填 2。p1指针处填 1,p1前移。p0指针处填 0,p0前移。关键p1总是走在p0前面(或重合),覆盖顺序保证了 0 不会覆盖 1,1 不会覆盖 2(在错误的位置)。

2026-03-18 22:44:57 450

原创 169. 多数元素

极限一换一:不同的数字见面就‘同归于尽’,相同的数字见面就‘抱团取暖’。因为众数超过了总数的一半,所以哪怕它跟所有其他异类一个个对掉,最后活下来的肯定还是它。物理意义:把数组看作战场。ans是当前的擂主,hp是他的兵力。抵消机制:遇到同盟(x == ans),兵力 +1;遇到敌人(x!= ans),兵力 -1(相当于和一个敌人同归于尽)。换人机制:当兵力耗尽(hp == 0)时,说明之前的擂主已经拼光了,当前的x顺势成为新擂主。

2026-03-18 22:44:24 448

原创 136. 只出现一次的数字

消消乐魔法:异或运算就像‘对对碰’,两个相同的数字相遇会变成 0(相互抵消),最后剩下的那个就是落单的数字。性质 AN ^ N = 0(自己异或自己,归零)。性质 BN ^ 0 = N(任何数异或 0,保持不变)。性质 C:满足交换律和结合律 (顺序无所谓,a ^ b ^ c等于a ^ c ^ b结论0 ^ 0 ^ cc。

2026-03-16 22:29:12 374 1

原创 72. 编辑距离

改作业游戏:把单词 A 改成单词 B,每次只能动一个字母。如果当前字母不一样,我有三张牌可以出——‘删除’、‘插入’、‘替换’,看哪张牌能让我用最少的步数通关。状态定义dfs(i, j)表示将s[0...i]变成t[0...j]所需的最少操作次数。决策逻辑相等:直接跳过,不做操作 (不等:尝试三种操作,取最小值min(删, 插, 改) + 1。“进化论表格:从‘空串’进化到‘完整串’,每一步都可以选择‘删’(继承上面)、‘插’(继承左边)或‘改’(继承左上角),我们要选代价最小的那条路。状态定义。

2026-03-16 22:28:40 588

原创 1143. 最长公共子序列

消消乐游戏:从后往前比,如果两个字符一样,就都消掉并在得分本上 +1;如果不一样,就分别试着保留其中一个,看谁剩下的潜力大。状态定义dfs(i, j)表示s[0...i]和t[0...j]的最长公共子序列长度。决策逻辑相等 (:这是“白给”的公共字符,必须选!结果是。不等 (s[i]!= t[j]:要么s[i]没用,要么t[j]没用。我们看看删掉s[i]) 和删掉t[j]) 哪条路结果更好。

2026-03-15 21:10:12 463

原创 5. 最长回文子串

投石问路:以每一个可能的中心点(单个字符或两个字符的间隙)为圆心,向两边同时扩散,直到碰到不一样的字符为止。回文特性:中心对称。中心点:对于长度为 的字符串,共有 个中心( 个单字符中心, 个双字符间隙中心)。策略:枚举所有中心,向外while循环扩散。“万物皆中心:不管是字符还是间隙,我都给它一个编号i。通过除法把编号还原成左右指针,一次循环搞定所有奇偶情况。总中心数:长度为 的字符串,有 个中心点。映射公式l = i / 2当i是偶数时,l == r(指向同一个字符,奇回文当i。

2026-03-15 21:09:37 566

原创 64. 最小路径和

比价游戏:想要到达当前格子(i, j)的花费最少,就得问问它的前一步——‘上面’和‘左面’哪个更便宜,选便宜的那个加上我自己的值。状态定义dfs(i, j)表示从起点(0, 0)到达(i, j)的最小路径和。转移方程dfs(i, j) = min(dfs(上), dfs(左)) + grid[i][j]。边界处理:越界的地方视为“无穷大代价”,这样Math.min永远不会选择越界的路。

2026-03-13 21:30:36 547

原创 62. 不同路径

溯源游戏:我想知道走到终点(i, j)有几条路,就问问它的‘上家’——它头顶的格子(i-1, j)和左边的格子(i, j-1)各有几条路。状态定义dfs(i, j)表示从起点(0, 0)走到(i, j)的路径总数。转移方程dfs(i, j) = dfs(上) + dfs(左)。加法原理:路径总数等于所有可能的来源之和。“网格填数:每一个格子的路径数,都等于它‘正上方格子’和‘正左方格子’的路径数之和(汇流原理)。状态定义对应实际网格(i, j)的路径数。转移方程。哨兵技巧是唯一的“火种”。

2026-03-13 21:30:05 516

原创 32. 最长有效括号

栈底坐镇一个哨兵(红线),栈里存左括号下标(炸弹)。遇到右括号就尝试消掉一个炸弹,计算距离;消不掉就说明断连了,重置红线。栈内存放:下标 (Indices)。栈底含义“最后一个没有被匹配的右括号的下标”。它是计算长度的基准线。计算公式:当前右括号下标i- 栈顶下标(因为栈顶就是这一段有效括号的“起跑线前一位”)。

2026-03-12 23:58:52 644

原创 416. 分割等和子集

0/1 背包问题:把这一堆数字看作物品,能不能从中挑出一些物品,刚好填满容量为的背包?转化:只要找到一个子集和等于总和的一半,剩下的元素和自然也是一半。状态dfs(i, j)询问“在前i个物品中,能不能凑出和为j?选择:对于每个数字nums[i],只有两种选择——选它或者不选它。“填表游戏:我们有一排格子(容量 0 到 Target),每一个新来的数字都试图去勾选新的格子——要么继承上一行的结果,要么在上一行已有的结果上加上自己。状态定义f[i][j]表示“在前i个数字中,能否凑出和为j转移方程。

2026-03-12 23:58:21 415

原创 152. 乘积最大子数组

双面间谍策略:同时维护‘最大值’和‘最小值’,因为当前的‘最小值’(负数)乘以一个负数,可能立马翻身变成‘最大值’。状态定义fMax:以当前位置结尾的最大乘积。fMin:以当前位置结尾的最小乘积(为了等待下一个负数来实现逆袭)。转移方程:由于负数的存在,最大值可能来自:fMax * x(正数 正数)fMin * x(负数 负数 变成大正数)x本身(前面的积累太烂了,不如从头开始,相当于 Kadane 中的 restart)。

2026-03-11 20:53:54 579

原创 300. 最长递增子序列

接龙游戏:每一个数字都回头看,找出比自己小的‘前驱’中尾巴最长的那一个,接在它后面。状态定义dfs(i)表示以nums[i]结尾的最长递增子序列的长度。转移逻辑:遍历j < i。如果,说明i可以接在j后面。我们想要。结果:答案不仅仅是dfs(n-1),而是所有位置中的最大值。“接龙比赛:轮到我(第i个)接龙时,我回头看所有比我小的队友(j),挑一个最长的队伍接在后面。状态定义f[i]表示以nums[i]结尾的最长递增子序列的长度。状态转移,其中0 <= j < i且。

2026-03-11 20:53:22 613

原创 139. 单词拆分

中等给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。wordDict。

2026-03-10 23:40:45 460

空空如也

空空如也

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

TA关注的人

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