提示:以下是本篇文章正文内容,下面案例可供参考
1.自己的暴力解法
无
2.自己的进阶解法
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
int slow = 0, fast = 0, oldval = 99999999, ans = 0;
while (fast <= nums.size() - 1)
if (nums[fast] != oldval)
{
oldval = nums[fast];
nums[slow++] = nums[fast];
++ans;
++fast;
}
else ++fast;
return ans;
}
};
3.自己的库函数解法
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
vector<int>::iterator it = unique(nums.begin(), nums.end());
return it - nums.begin(); // 尾后迭代器减去首迭代器正好能得到元素的个数
}
};
4.题解的暴力解法
无
5.题解的进阶解法
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if (n == 0) {
return 0;
}
int fast = 1, slow = 1;
while (fast < n) {
if (nums[fast] != nums[fast - 1]) {
nums[slow] = nums[fast];
++slow;
}
++fast;
}
return slow;
}
};
作者:LeetCode-Solution
来源:力扣(LeetCode)
6.总结
双指针的快慢指针法的又一次使用。