提示:以下是本篇文章正文内容,下面案例可供参考
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.总结
双指针的快慢指针法的又一次使用。
本文介绍了使用双指针技巧解决数组中连续重复元素去除的问题,分别展示了暴力解法、进阶解法和库函数解法,并提供了详细的代码实现。通过比较不同解法,突出了快慢指针在算法优化中的应用。
600

被折叠的 条评论
为什么被折叠?



