-
思路
数组是升序,所以相等的元素一定出现在连续的一段区间内。核心是对比,相等就存到候选数组中,不相等就舍弃。最后得到的是候选数组。 -
代码
class Solution { public: int removeDuplicates(vector<int>& nums) { int j = 0; int len = nums.size(); for(int i = 1; i<len; ++i){ if(nums[j] != nums[i]) nums[++j] = nums[i]; } return ++j; } };
class Solution { public: int removeDuplicates(vector<int>& nums) { auto it = unique(nums.begin(),nums.end()); return it-nums.begin(); } };
j表示的是候选数组的下标,当候选数组与i指向的数不相等时,把i指向的数放入候选数组中,位置为j的后一位。
- 学习总结
- 快慢指针法;
- 原地算法进行删除操作时用j表示候选数组的索引,相当于利用原数组的空间生成一个新的数组;