朴素算法Bare Algo

双指针法

快慢指针、对撞指针等技巧解决数组和链表问题。

算法题

(12)
125. 验证回文串
简单
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
双指针字符串
26. 删除有序数组中的重复项
简单
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
数组双指针
283. 移动零
简单
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
数组双指针
15. 三数之和
中等
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。
数组双指针排序
11. 盛最多水的容器
中等
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
数组双指针贪心
167. 两数之和 II - 输入有序数组
中等
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。
数组双指针二分查找
977. 有序数组的平方
简单
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
数组双指针排序
27. 移除元素
简单
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
数组双指针
75. 颜色分类
中等
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
数组双指针排序
80. 删除有序数组中的重复项 II
中等
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
数组双指针
844. 比较含退格的字符串
简单
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
双指针栈字符串
42. 接雨水
困难
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
数组双指针动态规划栈

实际应用

(7)
虚拟列表窗口
中等
维护虚拟滚动的可视区。使用两个指针(Start/End)动态跟踪当前需要渲染的列表项范围。
滑动窗口双指针虚拟滚动性能优化
懒加载/预加载
简单
在长列表或轮播图中,利用双指针向外扩展,预加载可视区附近的资源(如图片或数据),实现无感翻页。
双指针性能优化资源加载
原地过滤/压缩
中等
处理大列表数据过滤时,使用快慢指针在原数组上进行操作,减少内存分配和垃圾回收(GC)压力。
快慢指针内存优化数组操作
Diff 优化 (双端比较)
困难
Vue/React Diff 算法优化。使用首尾四个指针(OldStart, OldEnd, NewStart, NewEnd)向中间收敛,快速处理首尾节点的增删移动。
双端指针框架原理
回文/对称规则校验
简单
检测字符串或数组是否中心对称,用于输入校验或特定的数据结构验证。
对撞指针校验算法
两路归并
中等
合并两份有序的日志流、埋点数据或分页结果。使用两个指针分别指向两个数组头部,按顺序选取较小值。
归并排序数据处理排序
分区/原地分组
中等
类似快速排序的 Partition 操作,利用双指针将数组“就地”分类(如将所有 Checkbox 选中的项移到前面)。
双指针扫描数组分类排序