题目在这: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 (原因在开头的题目分析里)