学习安排根据《代码随想录》~
上篇用快慢指针其实思路有点堵,参考了答案,这次练习就要独当一面了ヾ(◍°∇°◍)ノ゙!
leetcode 26 删除有序数组重复元素
同样是简单题,乍一看和上一篇没什么区别
于是乎,一顿操作猛如虎:
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
int slow=0;
int n=nums.size();
for(int fast=1;fast<n;fast++)
{
if(nums[slow]!=nums[fast])
{
slow=slow+1;
nums[slow]=nums[fast];
}
}
return slow;
}
};
结果:我不李姐!明明也是返回慢指针,为啥会出错呢?例子:【1,1,2】返回【1】
捋一下思路,确保步骤确实没错:
没问题啊,Slow不就是指向无重复数组最后一个吗?
看了一眼答案,同样也是指向慢指针,但是答案对的!
于是,又仔细看了看自己写的步骤,发现一个问题:
我的 slow从0开始计数,fast从1开始计数,导致slow会比正常输出少1!
好家伙,于是乎,完善了一下代码:
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
int slow=0;
int n=nums.size();
if(n==0)return 0;
for(int fast=1;fast<n;fast++)
{
if(nums[slow]!=nums[fast])
{
slow=slow+1;
nums[slow]=nums[fast];
}
}
return slow+1;
}
};
最后终于成了:
哎,还是菜啊!!!