给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。
用快慢指针来记录遍历的坐标,最开始时两个指针都指向第一个数字,如果两个指针指的数字相同,则快指针向前走一步,如果不同,则两个指针都向前走一步,这样当快指针走完整个数组后,慢指针当前的坐标加1就是数组中不同数字的个数。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int pre = 0, cur = 0, n = nums.size();
while (cur < n)
{
if (nums[pre] == nums[cur]) ++cur;
else nums[++pre] = nums[cur++];
}
return nums.empty() ? 0 : (pre + 1);
}
};
Python版本
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if(len(nums)<2):
return len(nums)
i = 0
for j in range(1,len(nums)):
if(nums[j] != nums[i]):
i += 1
nums[i] = nums[j]
return i+1
本文介绍了一种在不使用额外空间的情况下,从排序数组中去除重复元素的方法。通过快慢指针技巧,实现了在O(1)额外空间内修改原数组,确保每个元素仅出现一次,并返回新数组的有效长度。
1454

被折叠的 条评论
为什么被折叠?



