前言
努力从今天开始成功从零开始 只要你还愿意努力世界就会给你惊喜
本章的内容是力扣每日随机一题的部分方法的解析
提示:以下是本篇文章正文内容,下面案例可供参考
26. 删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:
- 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
- 返回 k 。
链接
- 删除有序数组中的重复项题链接link
方法一:三指针
时间复杂度O(N)
空间复杂度O(1)
int removeDuplicates(int* nums, int numsSize)
{
int src1=0;
int src2=1;
int dest=0;
while(src2<numsSize)
{
if(nums[src1]!=nums[src2])
{
nums[dest++]=nums[src1];
src1=src2;
src2++;
}
else
{
src2++;
}
}
nums[dest++]=nums[src1];
return dest;
}
方法二:双指针
时间复杂度O(N)
空间复杂度O(1)
int removeDuplicates(int* nums, int numsSize)
{
int src=1;
int dest=0;
while(src<numsSize)
{
if(nums[src]==nums[dest])
{
src++;
}
else
{
nums[++dest]=nums[src++];
}
}
return dest+1;
}
总结
Ending,今天的力扣每日一题内容就到此结束啦,如果后续想了解更多,就请关注我吧,一键三连,还有许多种方法没有写出希望各位佬补充哦~