hot100--双指针(滑动窗口)
以下几题都是使用到一个:定义fast,slow指针,用快指针遍历数组,slow指针不断缩小范围,
移动零
⚠️思路:
使用两个指针(初始化值都为0):
慢指针(slow):指向当前已经处理好的序列的尾部
快指针(fast):指向当前正在遍历的元素
算法步骤
快指针遍历整个数组
当快指针指向的元素非 0 时,将其与慢指针指向的元素交换,然后慢指针前进一位
当快指针指向的元素是 0 时,只移动快指针
这样就能把所有非零元素按顺序移到前面,零自然就被挤到后面了。

长度最小的子数组

乘积小于k的子数组

无重复字符的最长子串

上面几题都是双指针初始化为0,下面是一左一右指针
11.盛水最多的容器
*⚠️思路:定义一左一右两个指针,因为容积是由短边决定的,而底边已经是最大了,无论移动哪边都是减一,所以那边短就移动哪边,当左右指针相遇时,return

15.三数之和
- ⚠️ 思路:首先对数组进行升序排序,创建循环(I < nuts.length-2,因为要留两个位给left和right,不然会溢出),进行if判断,如果I大于0并且nums[I]==nums[I-1],跳过本次循环(对选取的这个数进行去重),然后设置left=I+1,right = 数组长度-1,分别去判断当sum三个情况,当sum=0时,要分别对left和right也进行去重(‼️I的去重是和前一个比较,left和right是和下一个比较)
![截屏2026-03-18 11.28]()
前缀,后缀
42.接雨水
- ⚠️ 思路:设置
pre_max,suf_max表示前缀和后缀的实时最大值,设置两个数组存储前缀和后缀,每个位置的前/后缀等于当前的最大前缀/后缀;在循环中判断一个位置的前缀后缀谁小(小的代表了最终可以装多少水),然后取较小值减去对应的height值(前后缀用线画出来表示一个🪣,而height表示黑格,)



浙公网安备 33010602011771号