LeetCode 26删除排序数组中的重复项
- 题目简述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
-
输入:nums = [1, 1, 2] 输出:2 (修改后的数组是[1,2])
输入:nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] 输出:5 (修改后的数组是[0, 1, 2, 3, 4])
- 思路:利用双指针遍历数组,令指针
指针k = 0,
开始遍历,如果遇到i=1
和nums[i]
不相等,则说明找到新元素,将nums[k]
, 然后进行赋值k++
,指针nums[k] = nums[i]
随着指针k
不断向前移动,直到i
指向末尾。最后i
就是修改后的数组元素个数。仅遍历一遍时间复杂度k+1
O(n)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(!n) return n;
int k = 0;
for(int i = 1; i < n; i++)
{
if(nums[i] != nums[i-1])
{
k++;
nums[k] = nums[i];
//nums[++k] = nums[i];//上两句等价写法
}
}
return k + 1;
}
};