26. 删除有序数组中的重复项
这道题想让你实现删除非递减数组里重复的元素,然后返回还剩下多少元素。
那其实就是和27一样的,双指针:
cpp
class Solution {
public:
int removeDuplicates(vector<int> &nums)
{
int slow = 0, fast;
int n = nums.size();
for (fast = 0; fast < n; fast++) {
if (slow == 0 || nums[slow - 1] != nums[fast]) {
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
};如果发现快指针指的这个东西和上一次插到慢指针那里的东西不一样了(nums[slow - 1] != nums[fast]),说明是新的一种东西,需要插到慢指针那。
slow==0那个是因为nums[slow - 1]的选取条件是新数组里必须至少有一个元素,所以要跳过0这个位置。或者你也可以让快慢指针的出发点都是1,这样就没必要写这个。