自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 338. 比特位计数(动态规划 + 位运算详解)

<think>我们根据要求,需要基于用户提供的文章内容,生成≤150字的文章摘要。用户文章是关于LeetCode 338题的解题思路,重点在动态规划和位运算。摘要需简洁概括核心内容。注意长度限制。</think>本文介绍 LeetCode 338 题“比特位计数”,采用动态规划与位运算计算 0 到 n 每个数的二进制中 1 的个数。核心递推公式为 ans[i] = ans[i >> 1] + (i & 1),时间复杂度 O(n),空间复杂度 O(n)。同时对比了暴力法、Brian Kernighan 算法等

2026-09-01 15:15:18 330

原创 LeetCode 392. 判断子序列(双指针 + 进阶二分查找详解)

<think>我们只需要根据内容生成摘要,≤150字。用户要求“根据以下内容,生成≤150字的文章摘要”。内容是关于LeetCode 392判断子序列的双指针和二分查找解法。摘要应概括主要方法、复杂度、进阶场景。注意字数限制,控制在150字以内。需要简洁明了。</think>本文介绍LeetCode 392判断子序列的两种解法:双指针法适用于单次判断,时间复杂度O(n);进阶场景下预处理T构建字符索引列表,配合二分查找快速匹配,时间复杂度O(m log n),可高效处理海量S查询。代码含Java/Pytho

2026-09-01 15:14:45 240

原创 LeetCode 69. x 的平方根(二分查找详解 + Java Python 实现)

x的平方根

2026-08-30 19:38:30 187

原创 LeetCode 9. 回文数(数学反转详解 + Java Python 实现)

回文数

2026-08-30 19:36:29 391

原创 LeetCode 219. 存在重复元素 II(滑动窗口 + 哈希表详解)

存在重复元素二

2026-08-29 13:54:52 308

原创 LeetCode 217. 存在重复元素(哈希表详解 + Java Python 实现)

存在重复元素

2026-08-29 13:54:10 310

原创 LeetCode 160. 相交链表(双指针技巧详解 + Java Python 实现)

160. 相交链表 - 力扣(LeetCode)

2026-08-25 21:54:33 216

原创 LeetCode 141. 环形链表(快慢指针详解 + Java Python 实现)

141. 环形链表 - 力扣(LeetCode)

2026-08-25 21:48:31 238

原创 LeetCode 171. Excel 表列序号(进制转换详解 + Java Python 实现)

摘要 LeetCode 171题要求将Excel列名称(如"A"、"AB")转换为对应的数字序号。解题关键在于理解这是一个从1开始的26进制系统。通过遍历字符串,使用公式res = res * 26 + (c - 'A' + 1)进行计算,其中c - 'A' + 1将字母A-Z映射为1-26。该解法时间复杂度O(n),空间复杂度O(1)。这是168题(数字转列名)的逆运算,两者共同展示了进制转换的核心思想。

2026-08-23 21:52:03 239

原创 LeetCode 205. 同构字符串(双向映射详解 + Java Python 实现)

摘要 LeetCode 205题要求判断两个字符串是否同构,即能否建立字符间的双向唯一映射。解题关键在于维护两个哈希表(或数组)分别记录s→t和t→s的映射关系,确保: s中的相同字符必须映射到t中的相同字符 t中的相同字符必须被s中的唯一字符映射 通过同步遍历字符串,检查并建立双向映射关系。Python/Java实现均采用双哈希表,时间复杂度O(n),空间复杂度O(n)。也可用固定大小数组优化空间。典型测试用例验证了算法的正确性,如"egg/add"返回true,"foo/bar"返回false。

2026-08-23 21:50:15 206

原创 LeetCode 168. Excel 表列名称(进制转换详解 + Java Python 实现)

LeetCode 168. Excel 表列名称

2026-08-22 11:38:49 213

原创 LeetCode 125. 验证回文串(双指针详解 + Java Python 实现)

LeetCode 125. 验证回文串

2026-08-22 11:07:30 231

原创 LeetCode 67. 二进制求和(模拟加法详解 + Java Python 实现)

这道题要求实现二进制字符串加法。解题思路是模拟手工加法过程:从右到左逐位相加,处理进位,最后反转结果。关键点包括处理不等长字符串(短的前面补0)、记录进位、处理最高位可能的进位。Python和Java实现都遵循这一逻辑,只是语法细节不同(如字符转数字方式)。时间复杂度为O(max(m,n)),空间复杂度相同。类似思路也可用于其他进制加法问题,只需调整进位基数为相应进制即可。

2026-08-21 12:23:13 170

原创 LeetCode 58. 最后一个单词的长度(多种解法详解 + Java Python 实现)

本文介绍了LeetCode 58题"最后一个单词的长度"的三种解法: 从后往前计数法:跳过末尾空格后统计单词长度,使用布尔变量标记状态。 双指针区间法:先定位单词末尾,再向前找到单词开头,计算差值得到长度(面试推荐)。 库函数法:使用strip()和split()直接处理(仅限Python)。 三种方法的时间复杂度均为O(n),空间复杂度除库函数法为O(n)外均为O(1)。双指针法代码简洁高效,是面试中的首选方案。文章还提供了Python和Java实现代码,并对各方法进行了复杂度分析和适用场景说明。

2026-08-21 11:29:22 155

原创 LeetCode 28. 找出字符串中第一个匹配项的下标(暴力匹配 + KMP 算法详解)

本文介绍了LeetCode 28题"找出字符串中第一个匹配项的下标"的两种解法:暴力匹配和KMP算法。暴力匹配通过逐个字符比较实现,时间复杂度O(m×n);KMP算法利用next数组跳过不必要匹配,时间复杂度O(m+n)。文章详细解释了KMP的核心思想,包括next数组的定义和构建过程,并提供了Python和Java的代码实现。两种方法各具特点:暴力匹配简单直观,KMP更高效但实现复杂,适合处理长字符串匹配问题。

2026-08-20 21:29:57 246

原创 LeetCode 20. 有效的括号(栈的经典应用 + Java Python 实现)

LeetCode 20题要求判断由三种括号组成的字符串是否有效匹配。解题关键在于利用栈的后进先出特性:遇到左括号入栈,遇到右括号时检查栈顶是否匹配。Python和Java实现都采用栈结构,时间复杂度O(n),空间复杂度O(n)。Python使用字典存储括号对,Java版本提供了HashMap和if判断两种实现方式。特别注意遍历结束后需检查栈是否为空,以排除多余左括号的情况。这道题是栈结构的经典应用,考察对数据结构的理解和边界条件处理能力。

2026-08-19 10:49:02 262

原创 LeetCode 13. 罗马数字转整数(多解法详解 + Java Python 实现)

这篇文章详细介绍了LeetCode第13题"罗马数字转整数"的解题思路和多种实现方法。核心思想是识别罗马数字的特殊规则(如IV=4、IX=9等),当小数字出现在大数字左边时进行减法运算。 文章提供了三种Java实现方式: HashMap字典版 - 使用哈希表存储字符数值映射 ASCII数组查表版 - 通过ASCII码直接索引,效率更高 Switch-case倒序遍历版 - 从右向左处理并比较前后值 以及两种Python实现: 标准字典版 - 正向遍历处理特殊情况 倒序遍历版 - 简化比较逻辑 所有方案都遵循

2026-08-19 10:02:36 488

原创 LeetCode 136. 只出现一次的数字(异或运算详解 + Java Python 实现)

这篇文章详细讲解了如何利用异或运算解决LeetCode 136题"只出现一次的数字"。核心思路是通过异或运算的自反性和交换律,将数组中所有元素进行异或操作,成对出现的数字会相互抵消(结果为0),最终剩下的就是唯一单独出现的数字。文章提供了Java和Python代码实现,并分析了时间(O(n))和空间(O(1))复杂度。此外,还对比了哈希表、排序等其他解法,深入解释了异或运算的特性及应用场景,包括变量交换、加密解密等。最后总结了这道题的解题关键点,强调异或运算在算法问题中的重要性。

2026-08-18 12:05:50 141

原创 LeetCode 121. 买卖股票的最佳时机(动态规划思想详解 + Java Python 实现)

LeetCode 121题要求计算股票买卖的最大利润,只能进行一次买入和卖出操作。最佳解法采用一次遍历,动态维护历史最低价minPrice和当前最大利润maxProfit。对于每天的价格,更新最低价并计算当天卖出能获得的利润,保持全局最大利润即可。该方法时间复杂度O(n),空间复杂度O(1)。相比暴力法的O(n²)更高效,适合大规模数据。代码实现展示了Java和Python版本,并比较了使用数学函数与if判断的性能差异。

2026-08-18 11:45:11 314

原创 LeetCode 119. 杨辉三角 II(原地更新优化详解 + Java Python 实现)

本文介绍了两种解决LeetCode 119题(杨辉三角II)的方法,重点分析了进阶要求的O(rowIndex)空间复杂度解法。方法一使用双列表存储前后两行数据,空间复杂度为O(2k);方法二通过单列表倒序更新的优化方式实现O(k)空间复杂度。文章详细解释了倒序更新的必要性(避免数据覆盖),并通过示例逐步演示了算法执行过程。最后对比了两种方法的优缺点,指出方法二在空间效率上的优势。关键点在于理解倒序更新如何保持上一行数据的正确性。

2026-08-17 18:40:38 358

原创 LeetCode 118. 杨辉三角(动态规划思想详解 + Java Python 实现)

这篇文章详细讲解了LeetCode第118题"杨辉三角"的解题思路和实现方法。文章首先介绍了杨辉三角的基本性质,包括每行首尾为1、每个数字是上一行相邻两数之和等特点。然后重点阐述了动态规划的解法思路:逐行生成,每行首尾填充1,中间元素通过上一行相邻元素相加得到。作者提供了Java和Python两种实现代码,并进行了详细注释。文章还分析了时间复杂度(O(n²))和空间复杂度(O(1)),比较了数学公式法的优缺点,最后总结了动态规划思想在这道题中的应用。全文逻辑清晰,示例丰富,非常适合算法初学者理解杨辉三角的生

2026-08-17 11:16:18 196

原创 LeetCode 108. 将有序数组转换为二叉搜索树(递归构建详解 + Java Python 实现)

摘要: 题目要求将升序数组转换为高度平衡的二叉搜索树(BST)。核心思路是递归二分:选择数组中间元素作为根节点,确保左右子树节点数平衡。递归构建左子树(左半部分)和右子树(右半部分),终止条件为左边界超过右边界。Java/Python实现均通过计算中间索引分割数组,时间复杂度O(n),空间复杂度O(log n)。例如,数组[-10,-3,0,5,9]可构建为以0为根、左右子树高度差不超过1的BST。注意偶数长度数组可能有多解,选择不同中位数均合法。

2026-08-16 16:09:40 250

原创 LeetCode 88. 合并两个有序数组(双指针详解 + Java Python 实现)

这篇文章详细讲解了LeetCode第88题"合并两个有序数组"的两种解法。第一种方法使用临时数组进行归并排序式合并,时间复杂度O(m+n),空间复杂度O(m+n)。第二种更优方法是利用双指针从后往前原地合并,时间复杂度O(m+n),空间复杂度O(1)。文章通过Java/Python代码示例、复杂度分析和优缺点对比,重点推荐了第二种方法,强调其原地合并的特性是面试时应掌握的经典解法。两种方法都采用双指针技术,但后者更符合题目对空间效率的要求。

2026-08-15 18:44:05 236

原创 LeetCode 66. 加一(数组进位处理详解 + Java Python 实现)

摘要 LeetCode 66题"加一"要求对表示大整数的数组进行加1操作并返回结果。解题关键在于模拟进位过程:从数组末尾开始遍历,遇到非9数字直接加1返回;遇到9则置0继续进位;若所有位都是9,需创建新数组首位设为1。Java和Python实现均采用此思路,时间复杂度O(n),空间复杂度O(1)(最坏情况O(n))。该解法简洁高效,正确处理了各种边界情况,包括普通进位和全9的特殊情况,可作为处理类似进位问题的基础模板。

2026-08-15 18:41:36 331

原创 LeetCode 35. 搜索插入位置(二分查找详解 + Java Python 实现)

这道题要求在有序数组中查找目标值的插入位置。关键点在于使用二分查找实现O(log n)的时间复杂度。二分查找过程中,当中间值等于目标值时直接返回索引;若中间值小于目标值则搜索右半部分,否则搜索左半部分。循环结束后,左指针left指向的位置即为目标值应插入的位置。文章详细解释了二分查找的原理和边界条件,并提供了Java和Python的实现代码。通过分析循环终止时left和right指针的关系,证明了left指针的正确性。总结指出,二分查找是基础算法,掌握后能解决许多类似问题。

2026-08-14 14:03:22 371

原创 LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)

摘要 LeetCode 27题要求原地移除数组中所有等于给定值的元素,并返回剩余元素数量。提供三种解法:暴力解法(O(n²)时间)、同向双指针(快慢指针,保持顺序,O(n)时间)和双向双指针(首尾指针,不保证顺序,O(n)时间)。推荐使用双指针方法,其中同向指针适合需要保持顺序的场景,双向指针在元素顺序无关时效率更高。最终只需保证前k个元素有效即可,其余元素不影响结果。

2026-08-14 10:28:41 333

原创 LeetCode 26. 删除有序数组中的重复项(双指针详解 + Java Python 实现)

本文详细解析了LeetCode 26题"删除有序数组中的重复项"的解决方案。题目要求在O(1)额外空间下原地删除重复元素,并返回新长度。推荐使用双指针(快慢指针)方法:快指针遍历数组,慢指针记录唯一元素位置。当两指针所指元素不同时,将快指针元素复制到慢指针后移位置。该方法时间复杂度O(n),空间复杂度O(1)。文章提供了Java和Python实现代码,并对比分析了不推荐的暴力解法(O(n²)时间,O(n)空间)。关键点在于利用数组有序特性,通过双指针高效完成去重操作。

2026-08-13 11:17:28 248

原创 LeetCode 14. 最长公共前缀(Longest Common Prefix)

这篇文章详细讲解了 LeetCode 第 14 题"最长公共前缀"的解法。摘要如下: 题目要求在字符串数组中寻找所有字符串的最长公共前缀。文章分析纵向扫描法是最优解,即以第一个字符串为基准,逐字符与其他字符串同位置比较,遇到不匹配或越界时返回当前前缀。提供了 Python 和 Java 的实现代码,并比较了两种语言的差异。文章还讨论了时间复杂度(O(S))、空间复杂度(O(1)),指出常见错误如空字符串处理和索引越界问题,最后简要提及其他解法思路(水平扫描、分治法)。该问题考察字符串处理和边界条件处理能力,

2026-08-12 16:26:49 356

原创 跟着 MDN 学无障碍 Day 9:多媒体无障碍实战指南

当我们谈论 Web 无障碍时,文本内容和交互控件往往是首先被关注的领域。然而,随着多媒体内容在互联网上的爆炸式增长,视频、音频和动态图像带来的无障碍挑战同样不容忽视。与结构化的文本不同,多媒体信息具有时间流动性和视觉听觉双重依赖的特性,这使得辅助技术难以直接解析其内涵。

2026-06-22 23:02:28 586

原创 跟着 MDN 学无障碍 Day 8:WAI-ARIA 实战技能测试解析

文章摘要 本文通过解析MDN的三道WAI-ARIA测试题,演示如何在不修改HTML结构的情况下,使用ARIA属性提升网页可访问性。第一题展示如何用role="list"和role="listitem"为非语义div元素添加列表语义;第二题通过role="search"和aria-label优化无标签搜索表单;第三题利用aria-live="polite"实现动态内容更新的屏幕阅读器通知。文章强调ARIA应作为语义补充而非功能替代,并指出最佳实践是在开发初期就采用原生语义元素和无障碍设计。

2026-06-22 22:59:39 190

原创 跟着 MDN 学无障碍 Day 7:WAI-ARIA 基础

WAI-ARIA是一套补充HTML语义的技术规范,旨在解决现代Web应用的无障碍访问问题。它通过角色、属性和状态三类特性,为辅助技术提供缺失的语义信息,适用于地标标记、动态内容通知、键盘导航优化等场景。使用时应遵循"仅在必要时"的原则,优先选择原生HTML元素,在无法修改HTML结构或实现复杂功能时再采用ARIA。典型应用包括为搜索表单添加role="search"、用aria-live通知内容更新、通过tabindex扩展键盘导航等,从而确保所有用户都能平等访问Web内容。

2026-06-22 08:51:23 299 1

原创 跟着 MDN 学无障碍 Day 6:CSS 与 JavaScript 无障碍技能测试

本文通过三个实践任务分析CSS和JavaScript的无障碍设计要点:1)链接需保持下划线与明显颜色区分,确保键盘焦点可见;2)文本颜色对比度需达WCAG标准,使用rem单位保证可缩放性;3)JavaScript交互需同时支持鼠标和键盘操作,通过tabindex或语义化元素实现键盘可访问性。这些实践能帮助开发者创建对各类用户友好的无障碍网页,从视觉识别到操作方式都需兼顾不同使用场景。

2026-06-22 08:43:43 372

原创 跟着 MDN 学无障碍 Day 5:CSS 和 JavaScript 无障碍最佳实践

本文系统介绍了CSS和JavaScript在无障碍Web开发中的最佳实践。CSS方面强调保持语义与视觉一致性,优化文本可读性、链接状态反馈和表单焦点管理,合理处理内容隐藏并尊重用户样式覆盖。JavaScript方面提倡"不唐突增强"原则,建议优先使用浏览器原生功能,并以表单验证为例说明如何实现无障碍交互。核心思想是:视觉设计应服务于功能而非颠覆语义,交互实现应确保基础功能在JS不可用时仍能工作。这些实践能帮助开发者构建既美观又包容的Web应用,提升残障用户的使用体验。

2026-06-22 08:33:42 445

原创 跟着 MDN 学无障碍 Day 4:HTML 无障碍技能测试实战

本文通过四个实战任务帮助开发者检验HTML无障碍知识,包括修复信息面板的语义结构、完善表单的标签与分组、创建信息丰富的可访问链接等。每个任务都针对常见无障碍问题提供解决方案,如使用正确的标题层级(h1-h6)、有序列表(ol)、按钮元素(button),建立label与input的关联,以及编写描述性链接文本等。这些优化能显著提升屏幕阅读器用户的体验,使网页内容更易于理解和操作。文章强调语义化HTML对无障碍访问的重要性,为开发者提供了实用的代码示例和知识点解析。

2026-06-21 11:39:36 329

原创 跟着 MDN 学无障碍 Day 3:HTML——无障碍的良好基础

本文系统讲解了HTML语义化对网页无障碍性的重要性及实践方法。文章指出语义化HTML是构建无障碍网页的基础,通过正确使用HTML标签(如用<button>而非<div>模拟按钮)可显著提升残障用户的可访问性。文中详细阐述了语义化的核心价值:开发更便捷、移动端适配更好、SEO优化更优,并通过对比正确与错误代码示例,说明语义化文本结构、HTML5布局元素对屏幕阅读器用户体验的关键影响。最后强调UI控件的键盘可访问性,建议优先使用原生表单控件,若必须自定义控件则需通过tabindex和JavaScript重建键盘

2026-06-21 11:37:29 223

原创 跟着 MDN 学无障碍 Day 2:解决常见的无障碍问题——从 HTML 到实战测试

本文深入探讨Web无障碍设计的实现方法,从HTML语义化、键盘操作、替代文本到元素关系四个方面提出具体解决方案。强调无障碍设计不是抽象概念,而是可系统化诊断和修复的技术问题。通过对比不良实践与优化代码,展示如何确保视觉障碍、听觉障碍等用户群体能够顺畅访问网页内容。文章指出无障碍是一个持续改进过程,建议开发者采用语义化标签、原生交互元素、替代文本和明确元素关系等最佳实践,同时配合键盘测试、屏幕阅读器测试等验证手段,逐步提升网站可访问性。

2026-06-19 03:44:30 334

原创 跟着 MDN 学无障碍设计 Day 1:重新认识无障碍——不只是为残障人士设计

本文探讨了Web无障碍(Accessibility)设计的重要性与实践方法。全球超过10亿残障人士面临数字产品使用障碍,无障碍设计不仅关乎道德与法律合规,也影响产品可用性和市场覆盖。文章分析了四类主要障碍用户需求:视觉障碍用户依赖屏幕阅读器和替代文本,听觉障碍用户需要字幕和文字转录,行动障碍用户要求键盘可操作界面,认知障碍用户受益于清晰、一致的界面设计。通过语义化HTML、提供替代文本、确保键盘操作等简单实践,开发者能显著提升产品包容性,同时惠及普通用户在各种情境下的使用体验。

2026-06-19 03:40:38 202

原创 跟着 MDN 学 React 框架 Day 9:React 学习资源与进阶方向指南

本文为React学习者的进阶指南,系统梳理了React生态中的关键技术与资源。核心内容包括:组件级样式管理策略,推荐为每个组件创建独立CSS文件;React DevTools开发者工具的使用方法;useReducer Hook在复杂状态管理中的应用;Context API解决跨组件数据共享问题;类组件的定位与学习价值;React Testing Library等测试策略;以及React Router实现的客户端路由方案。文章强调这些技术在实际项目中的适用场景,并提供了官方文档和优质教程作为延伸阅读资源,帮助

2026-06-18 09:58:38 275

原创 跟着 MDN 学 React 框架 Day 8:React 中的无障碍访问与焦点管理

本文探讨了React应用中的无障碍访问优化,特别关注键盘用户的焦点管理问题。文章通过实例分析指出了当前应用中存在的键盘导航缺陷:当组件模板切换时,焦点会丢失,导致键盘用户迷失位置。解决方案包括: 使用useRef获取DOM元素引用,绑定到编辑字段和按钮 利用useEffect在模板切换时管理焦点转移 实现自定义usePreviousHook来追踪状态变化历史 创建健壮的焦点管理逻辑,确保焦点只在状态实际变化时转移 这些改进显著提升了键盘和屏幕阅读器用户的操作体验,使应用真正实现了无障碍访问。文章强调了在Re

2026-06-18 09:52:59 240

原创 跟着 MDN 学 React 框架 Day 7:编辑任务、过滤列表与条件渲染

本文基于React教程,进一步完善Todo应用,新增任务编辑、状态过滤和条件渲染功能。首先实现editTask函数,通过map方法更新特定任务名称。在Todo组件中,使用useState管理编辑状态,设计查看和编辑两种模板,通过三元运算符实现条件渲染。编辑模板包含表单输入框和按钮,点击事件切换isEditing状态,并通过newName状态管理用户输入。最终构建了一个完整的任务管理应用,涵盖添加、删除、编辑和状态切换等核心功能。

2026-06-17 19:41:43 632

空空如也

空空如也

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

TA关注的人

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