【数据结构】双指针

博客介绍了双指针的两种类型:同向和反向。同向双指针可用于将0移到后面的问题,解题时要明确可填充位置,处理好已处理数据。反向双指针不会保持相对顺序,解题可能涉及交换值,且每次要交换至少一个指针,还提及了leetcode 26例题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

双指针同向

leetcode 26

双指针反向


双指针同向

将所有的0移到后面,要确保前面非0的数字是否需要保持原始位置。

 解题步骤

i 的含义是 下一个可以被填充的位置。[0,i) 是已经处理好的数据。

例题:

leetcode 26

"""
easy
双指针同向,因为要保证顺序不变。
要求:不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
因为数组是有序的,那么重复的元素一定会相邻。
"""
class Solution:
    def removeDuplicates(self, nums):
        # i 左边是已经处理好的元素;
        # 元素如果要话,ij都要右移;
        # 元素如果不要的话,j右移,i不动;
        # 当ij不在同一个位置上时,j标记的位置如果要的话,则将j的值赋给i。i++
        # i 左边是处理好的元素。
        i, j = 0, 1
        # i=0说明i左边什么都没有,第一个元素肯定是不重复的
        while j < len(nums):
            # 不相等,则交换
            if nums[j] != nums[i]:
                i+=1
                nums[i] = nums[j]
                j+=1
            else:
                j += 1
        return i+1

双指针反向

反向不会保持相对顺序。

解题步骤

有可能是交换两个值;有可能min(i,j)

注意每次一定要交换至少一个pointer。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值