同向双指针

本文探讨了在不使用哈希表的情况下,如何利用排序和二分法解决数组与字符串问题。重点介绍了同向双指针技巧,如在全零子串问题、数组去重和滑动窗口求和中的应用。此外,还讲解了快慢指针在处理链表问题(如带环链表和链表相交)中的作用。通过这些案例,展示了双指针在信息技术领域的广泛应用。
摘要由CSDN通过智能技术生成

两数之差

当不能使用哈希表时

1.可以在排序数据集上进行二分来替代
2.不能使用哈希表的情况比如数据集很大或者题目要求不适用额外空间

使用二分法代替哈希表

时间复杂度O(nlogn),n个数,每个数二分都需要logn的时间,所以是nlogn

同相双指针

  • 时间复杂度O(n)
  • 两根指针同向而行,都不会“回头”
    如果外层循环i从0到n-1;内层循环j从0到n-1,就会出现回头,但我们设置j是没有设置初值的,所以不会回头。
  • i和j一直++;时间复杂度取决于内层循环,内层循环不可能超过n(j<n),所以时间复杂度是O(n)
  • 每个指针访问数组中每个元素最多一次
j=1;
for i from 0 to n-1
    (为避免i移动到j上或j的右面,需要特殊处理j=max(j,i+1)while j<n(or i) and i,j的搭配不满足条件
		j+=1
	if j>=n
		break
	处理i,j这次搭配

全零子串问题

用同向双指针,求出以i开始的全零子串的长度(j-i),j是第一个非0元素的位置

数组去重

不用额外空间,考虑双指针
1.首先数组排序(可以用于后面判断是否重复),时间复杂度O(nlogn),是快排,不占用额外空间
2.从头到尾扫一遍,把不相同的数向前挪,相同的数跳过,时间复杂度O(n)

滑动窗口求和

套用同向双指针模板,唯一不同是j=0作为初始
j-i=k为止结束
j指向窗口i-k+1

带环链表问题和链表相交问题

1.带环链表
快慢指针
2.链表相交点
先转换成带环链表,再求入口

K次替换后的最长重复字符

出现子字符串且i和j不回头的问题:可以想到同向双指针
1.j指向满足条件的子字符串的后面一个位置
2.如果j-i-maxFreq>k
i~j-1的substring 需要k+1
i~j-2的substring只需要k次替换
3.否则,i~j-1的substring<=k替换
需要j-i(j-1-i+1)

数组和字符串上的同向双指针总结

1.数组和字符串的问题有很多题都是和双指针,特别是同向双指针有关
2.通常问题让我们求是一段子树或者子字符串
3.所以遇到“子数组SubArray”和“子字符串Substring”就需要往同向双指针思考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值