给你一个 非严格递增排列 的数组
nums,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回nums中唯一元素的个数。 考虑nums的唯一元素的数量为k,你需要做以下事情确保你的题解可以被通过:
nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。k 
首先定义两个数组的下标fast和slow,初始时slow=fast=1,题中要求删除重复的元素,我们的大概思路就是fast往后走,如果遇到slow位置处不同的数字,就让nums[fast]赋值给nums[slow],然后slow++,fast也++,如果fast往后走的过程中遇到的数字与slow位置处的数字相同,那么就让fast继续往后走,也就是fast++,最后fast走到numsSize为止,此时slow的位置就是要求的不唯一数组的个数
图解:

int removeDuplicates(int* nums, int numsSize)
{
if(numsSize==0)
{
return 0;
}
int fast=1,slow=1;
while(fast<numsSize)
{
if(nums[fast]!=nums[fast-1])
{
nums[slow]=nums[fast];
slow++;
}
fast++;
}
return slow;
}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;
}
};时间复杂度:O(N)
相关知识博客:
总结:这道题运用到了数据结构——链表,相关链表的结构在之前数据结构初阶的学习中就已经给大家讲解过了,大家可以翻看之前的博客进行回顾总结,如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。