删除排序数组中的重复项
开始没有注意到题目的提示,思路是用vector的erase函数将所有相同的元素全部清除,当然这样会极大地增加程序的执行用时。所以关键在于用一个办法去避免删除操作。
思路:快慢指针
class Solution {
public:
int removeDuplicates(vector<int>& nums) { //定义两个指针,一个指针用来找到整个数组中所有不同的元素,
//另外一个指针将这些不同的,元素依次写入这个数组的前面
int count = 0;
int it1=0, it2=0;
int n=nums.size();
if (n == 0)
{
return 0;
}
it2++; //第二个位置
count = 1;
while (it2<n) {
if (nums[it2-1]!=nums[it2]) { //找到了一个不同的元素
++it1;
nums[it1] = nums[it2]; //将这个元素填在前面
++count;
}
++it2;
}
return count;
}
};
此前,我很喜欢使用STL中容器的迭代器,在刷题的过程中也要注意能够避免使用迭代器的话,就尽量避免使用它,这样是能够提高执行速度,并且减少内存占用。
关于双指针的题目
双指针包括快慢指针,滑动窗口,碰撞指针。
它一般用于解决一些线性结构的问题,一般用于链表和数组。