力扣(leetcode) 26. 删除有序数组中的重复项 (图解双指针算法)

这篇博客介绍了如何利用双指针法解决LeetCode上的经典问题——删除排序数组中的重复项。通过设立left和right两个指针,比较它们所指向的数值,当值相等时right指针后移,不等时left指针后移并将right的值赋给left。最终返回有效的数组长度。博客中提供了详细的步骤解析和Python代码实现。
摘要由CSDN通过智能技术生成

题目在这:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/

题目分析:

这道题需要注意的地方,在leetcode上返回的时候,要返回一个int型数字。他会在内部变成 ‘取数组的前几位’ 然后输出一个数组。

相当于这个:

for (int i = 0; i < len; i++) {
    print(nums[i]);
}

上面是官方解释,C语言。相当于python里的nums[:len] 就是取前len位。

思路分析:

学过数据结构的小伙伴应该很快能想到用双指针法。

1. 我们首先设立两个指针指向第一位数和第二位数(也可以同时指向第一位数,原理不变)。
在这里插入图片描述

2. 比较两个指针所指向值的大小,如果两者相等则让right指针往后移动。
在这里插入图片描述
3. 移动后再次比较两指针所指向的数值,不相等。则此时让left指针向后挪一位。并让right的值赋值给left。
在这里插入图片描述
在这里插入图片描述
4. 再让right往后挪动一位。然后比较两指针的值。
两指针的值相等,继续让right往后挪,left不动,直到right挪动到与left值不同的时候。重复上面步骤。
在这里插入图片描述

完整代码:

nums = [0,0,1,1,1,2,2,3,3,4]
n = len(nums)
index = 0
for i in range(n):
    if nums[i] != nums[index]:
        index += 1
        nums[index] = nums[i]
print(nums[:index + 1])

这里我所设置的index就相当于上面的left,循环中的i就相当于上面的right。
不必照抄代码。可以看懂思想用自己的方法模拟一下这个过程。

leetcode提交的时候。以往都是将调试时候的print改成return就行了。而这道题的原因,吧最后一句改成:
return index+1 (原因在开头的题目分析里)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度不学习!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值