- 博客(59)
- 收藏
- 关注
原创 无重复字符的最长子串-leetcode
本文介绍了一种滑动窗口算法,用于求解字符串中最长无重复字符子串的长度。算法维护一个哈希集合记录当前窗口字符,使用左右指针表示窗口边界。右指针遍历字符串时,若遇到重复字符则移动左指针并删除对应字符,直到无重复。每次更新窗口后记录最大长度。示例说明该算法能正确处理"abcabcbb"(3)、"bbbbb"(1)和"pwwkew"(3)等典型情况。时间复杂度为O(n),空间复杂度为O(字符集大小)。
2025-07-30 09:28:15
116
原创 长度最小的子数组-leetcode
本文介绍了一个滑动窗口算法,用于寻找数组中满足子数组和≥target的最小长度子数组。通过维护左右指针的滑动窗口,算法在O(n)时间复杂度内解决问题:扩展右边界累加元素,当和满足条件时收缩左边界并更新最小长度。若不存在满足条件的子数组则返回0。例如在target=7、nums=[2,3,1,2,4,3]时,最小长度为2(子数组[4,3])。该实现使用双指针技术高效地遍历所有可能窗口,适用于处理连续子数组问题。
2025-07-29 09:40:02
146
原创 三数之和-leetcode
本文探讨了如何在整数数组中找到所有不重复的三元组,使其和为0。通过排序数组并使用双指针法,固定第一个数后,在剩余部分用双指针寻找另外两个数的组合。关键点包括:1)排序预处理;2)跳过重复元素保证结果唯一;3)双指针高效搜索。时间复杂度为O(n²),优于暴力解法的O(n³)。示例表明该方法能正确处理各种情况,包括全零数组和不存在解的情况。给出的C++实现展示了具体算法流程,通过外层循环固定第一个数,内层双指针寻找匹配对,并处理重复元素。
2025-07-28 11:03:01
262
原创 盛最多水的容器-leetcode
摘要:该问题要求在给定高度数组中找到两条垂线,使其与x轴构成的容器能容纳最多水。采用双指针法,初始化左右指针分别指向数组两端,计算当前区域面积并更新最大值。通过比较左右指针的高度,移动较小值的指针以寻找更大面积。该算法时间复杂度为O(n),空间复杂度O(1),高效地解决了最大盛水问题。
2025-07-27 20:10:17
373
原创 两数之和 II - 输入有序数组-leetcode
本文讨论了在非递减有序数组中寻找两数之和等于目标值的两种解法。高效法采用双指针策略,初始时分别指向数组首尾,根据当前和与目标值的比较移动指针,时间复杂度O(n),空间复杂度O(1)。暴力法则通过双重循环遍历所有可能组合,时间复杂度O(n²)。题目保证输入有唯一解,要求返回元素下标(从1开始)。示例显示如[2,7,11,15]中2+7=9,返回[1,2]。高效法明显优于暴力法,适合处理大规模数据。
2025-07-27 14:34:09
129
原创 判断子序列-leetcode
摘要: 该问题要求判断字符串 s 是否为 t 的子序列。子序列定义是 t 删除某些字符(不改变剩余字符顺序)后得到的新字符串。解法采用双指针遍历:指针 j 跟踪 s 的字符,若与 t 的当前字符匹配则移动 j,最终若 j 遍历完 s 则返回 true。时间复杂度为 O(n),n 为 t 的长度。对于进阶问题(海量 s 查询),可预处理 t 构建字符索引,利用二分查找优化查询效率至 O(mlogn),m 为 s 的长度。示例验证了算法的正确性。
2025-07-25 17:05:32
382
原创 验证回文串-leetcode
这篇文章介绍了一个判断字符串是否为回文串的算法。回文串是指在移除所有非字母数字字符并统一转换为小写后,正读反读都相同的字符串。文中给出了三个示例,并提供了C++实现代码。该算法首先去除非字母数字字符,处理空字符串或单字符的特殊情况,然后使用双指针从两端向中间比较字符是否相同(忽略大小写),直到判断完整个字符串。代码通过字符转换和比较来实现回文判断,对于空字符串或单字符直接返回true。
2025-07-25 12:58:43
182
原创 实现 strStr()-leetcode
该算法实现了字符串匹配功能,用于在haystack中查找needle首次出现的位置。通过遍历haystack,每次截取与needle等长的子串进行比较,若匹配则返回当前下标。若haystack长度小于needle直接返回-1。时间复杂度O(n*m),其中n和m分别为两字符串长度。示例显示:"sadbutsad"中查找"sad"返回0,"leetcode"中查找"leeto"返回-1。注释中提到的find()函数是更简洁的内置实现
2025-07-24 15:07:31
413
原创 Z 字形变换-leetcode
本文介绍了一种将字符串按Z字形(实际为N字形)排列后逐行读取的算法。给定字符串s和行数numRows,算法通过确定每个字符在周期循环中的位置,将其分配到对应行。关键点在于发现循环周期为(numRows-1)*2,并通过余数判断字符应放置的行号。实现上使用字符串数组存储各行字符,最后合并输出。该方法能正确处理单行、单字符等特殊情况,时间复杂度为O(n)。示例验证了算法的正确性,如"PAYPALISHIRING"在3行时输出"PAHNAPLSIIGYIR"。
2025-07-24 13:18:31
243
原创 反转字符串中的单词-leetcode
该算法实现字符串中单词顺序的反转。首先遍历字符串,将非空格字符组成单词存入数组,遇到空格时保存当前单词并清空临时字符串。处理完所有字符后,将单词数组反向拼接成新字符串,单词间用单个空格分隔。示例输入" hello world "处理后输出"world hello",去除了多余空格。算法时间复杂度O(n),空间复杂度O(n),适用于包含前导/尾随空格及多个间隔空格的字符串处理。
2025-07-23 16:55:44
307
原创 最长公共前缀-leetcode
这篇文章介绍了一个查找字符串数组中最长公共前缀的算法实现。算法首先处理特殊情况(空数组或单元素数组),然后找到数组中最短字符串的长度作为比较基准。通过逐个字符比较所有字符串的对应位置,收集相同的字符构成公共前缀,遇到不匹配时立即终止。时间复杂度为O(n*m),其中n是字符串数量,m是最短字符串长度。示例显示对["flower","flow","flight"]返回"fl",对["dog","race
2025-07-23 13:33:17
198
原创 最后一个单词的长度-leetcode
这篇文章介绍了一个字符串处理问题:计算给定字符串中最后一个单词的长度。单词定义为不包含空格的连续字母序列。文章提供了三个示例说明问题要求,并给出了C++的解决方案。该解法从字符串末尾逆向遍历,跳过末尾空格,遇到非空格字符时开始计数,当再次遇到空格时返回当前计数值。若遍历完字符串仍未遇到空格,则返回累计的计数值。算法时间复杂度为O(n),空间复杂度为O(1)。
2025-07-23 13:02:01
158
原创 整数转罗马数字-leetcode
本文介绍了将整数转换为罗马数字的算法。罗马数字由I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)七种字符组成,遵循特殊转换规则:普通数字通过累加最大符号值转换,4/9开头的数字则使用减法形式(如IV表示4)。算法维护一个按值降序排列的符号表,通过贪心策略逐步减去最大可表示的罗马数字值,直至处理完整个数字。例如3749转换为"MMMDCCXLIX",1994转为"MCMXCIV"。实现时使用键值对存储符号与数值,通过循环处理每个可能
2025-07-16 14:18:10
148
原创 罗马数字转整数-leetcode
本文介绍了将罗马数字转换为整数的方法。罗马数字由I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)组成,通常小的数字在右边,但存在特殊组合如IV(4)、IX(9)等。两种解法思路相似:先建立字符到数值的映射,然后遍历字符串,当前数值小于后一位时减去当前值,否则累加。解法一使用vector存储中间值,解法二直接使用哈希表查询。时间复杂度均为O(n),空间复杂度O(1)。关键点在于处理特殊组合时通过比较相邻字符值实现数值的加减转换。
2025-07-16 10:50:28
204
原创 接雨水-leetcode
文章摘要:本文介绍了一种计算柱状图中能接多少雨水的算法。方法通过两次遍历数组:第一次从左到右记录左侧最高点,第二次从右到左记录右侧最高点。然后取这两个数组中的较小值作为最终高度,减去原始高度得到雨水总量。示例中,输入[0,1,0,2,1,0,1,3,2,1,2,1]可接6单位雨水。该算法时间复杂度为O(n),空间复杂度为O(n),简洁高效地解决了雨水收集问题。
2025-07-15 16:27:10
562
原创 分发糖果-leetcode
摘要:给定一个孩子评分数组ratings,要求分配糖果满足每个孩子至少1个糖果,且相邻孩子中评分更高的必须获得更多糖果。算法采用两次遍历:第一次从左到右确保右孩子比左孩子评分高时糖果更多;第二次从右到左确保左孩子比右孩子评分高时糖果更多。最终返回糖果总数。时间复杂度O(n),空间复杂度O(n)。
2025-07-15 14:50:05
229
原创 加油站-leetcode
该问题要求在环形路线上找到一个加油站,使得汽车能够绕行一周。给定两个数组gas和cost,分别表示每个加油站的汽油量和到下一站的消耗量。解决思路是遍历所有加油站,计算总剩余油量(totalRest)和当前剩余油量(curRest)。当curRest为负时,说明无法从当前起点出发,将起点设为下一个加油站并重置curRest。最后若totalRest非负,则返回起点,否则返回-1。算法时间复杂度为O(n),空间复杂度为O(1)。例如,输入gas=[1,2,3,4,5],cost=[3,4,5,1,2]时,输出3
2025-07-09 14:57:34
411
原创 除自身以外数组的乘积
输入: nums = [-1,1,0,-3,3]输入: nums = [1,2,3,4]输出: [24,12,8,6]输出: [0,0,9,0,0]
2025-07-09 12:53:01
282
原创 全覆盖路径规划算法之BCD源码实现(The Boustrophedon Cellular Decomposition)
BCD全覆盖路径规划算法
2025-01-06 19:49:05
1535
2
原创 cv::Mat 二进制文件保存与读取
cv::Mat 在 imwrite 时只能存储值为char类型,导致想保存int类型的数据时会越界自动转换。那么cv::Mat是否可以存储并保存int类型的数据呢?当然是可以的,定义cv::Mat 为 CV_32S的格式,并以二进制文件进行读写即可。
2024-07-08 13:23:19
580
原创 关于分区排序的算法思考及实现
但大家可能一眼就看出来了,多叉树有一个很明显的问题,它是有向的,即parent节点指向child节点,而且多叉树的特性是一个parent可以有多个child,但是一个child只能有一个parent,所以它不能完整的表征分区关系(比如2-3是相连的,但多叉树无法进行表征);对于很多机器人产品,都需要去某个区域进行工作(不限于扫地机的清扫任务、无人机的覆盖式搜索、割草机的区域割草等等),对于一次完整的任务而言,输出分区顺序是需要根据需求来的,有了分区之间的图结构后,可玩性就很高了。求取每个小区域的内轮廓。
2024-04-21 13:55:47
1075
原创 C++:关于“operator==”运算符重载理解 error: no match for ‘operator==’
关于 “operator == ”运算符重载的理解
2024-04-18 16:27:04
923
原创 win11配置wsl子系统
WSL 全称是(Windows Subsystem for Linux,适用于Linux的Windows子系统),使用 WSL 一方面可以享受 Windows 系统的稳定性,同时可以并存 Linux 环境,还可以直接互相调用,极大地方便了开发人员进行开发工作。第三种是在window上安装子系统,即WSL (运行开销比运行一个虚拟机低很多,所有对硬件要求相对较低,但是没有图形化显示界面,导致实时图片无法显示,据说有其他办法可以实现图像显示)。使用 VSCode 访问 WSL ,更方便开发。
2024-03-21 10:05:06
585
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人