力扣26题-删除有序数组中的重复项
题目:
给你一个 非严格递增排列 的数组 nums
,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums
中唯一元素的个数。
自己的解法:
int removeDuplicates(vector<int>& nums) {
int end=0,p=1;
while(p<nums.size())
{
if(nums[end]==nums[p])
p++;
else
nums[++end]=nums[p];
}
int invalidNums=nums.size()-end-1;
while(invalidNums)
{
nums.pop_back();
invalidNums--;
}
return (end+1);
}
我自己的解法其实和B站大佬的解法思想是一样的,都是双指针。但是我写出来的程序繁杂冗长,随后借鉴了大佬的双指针解法如下:
int removeDuplicates(vector<int>& nums) {
int k=1;
for(int i=1;i<nums.size();i++)
{
if(nums[i]!=nums[i-1])
nums[k++]=nums[i];
}
return k;
}
学习随想:
1.这种整型的数组指针其中一个可以用 for 循环中的循环变量代替,以减少代码量,如大佬用循环变量 i 来代替了快指针。
2.再者,是不是一般都会用循环变量来固定代替快指针呢?我的猜想是可能循环变量i++的属性完美地表达了快指针作为工作指针一直向后遍历的属性。实际是这样吗,还需通过刷题来用实践形成理论。
3.题目会自己将前k个数组元素维护为新的数组,所以可以省略掉我自己解中第二个while循环,达到更简洁的应试代码。
原文地址:https://blog.csdn.net/weixin_64084604/article/details/145126804
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!