删除有序数组中的重复项
1°题目链接
2°思路
三下标i j dst
i初始化为0
j初始化为1
det初始化为0 记录去重后数组下标
1:nums[i]==nums[j]
j++
相当于跳过重复元素
2:nums[i]!=nums[j]
不管之前有没有跳过重复元素
如果没跳过 此时i记录的就是没有重复过的数据
如果跳过了 此时i记录的就是重复过的数据 是第一个重复过的数据
此时把nums[dst]=nums[i] 这样给到新的下标
i=j j的位置给到i 跳过了所有重复的数字
j++ 接着i j下标对应元素进行比较 往后遍历
dst++ 更新新的下标 方便存储
3°实现
int removeDuplicates(int* nums, int numsSize)
{
if (numsSize == 0)
{
return 0;
}
int i = 0;
int j = 1;
int dst = 0;
while (j < numsSize)
{
if (nums[i] == nums[j])
{
++j;
}
else
{
nums[dst] = nums[i];
++dst;
i = j;
++j;
}
}
//可能最后两个数是重复的 这时候i记录的就是第一个数
nums[dst] = nums[i];
//dst此时为下标
++dst;
//dst就为前面的数据个数
return dst;
}
4°运行结果
#4删除有序数组中的重复项#完