给你一个 非严格递增排列 的数组 nums
,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums
中唯一元素的个数。
考虑 nums
的唯一元素的数量为 k
,你需要做以下事情确保你的题解可以被通过:
- 更改数组
nums
,使nums
的前k
个元素包含唯一元素,并按照它们最初在nums
中出现的顺序排列。nums
的其余元素与nums
的大小不重要。 - 返回
k
。
思路跟上一篇文章的移除元素一样,只不过这里改变一下,使每个元素只出现一次,可以开个map或者自己手动定义一个数组,如果当前这个数没出现过,就加入到新数组中来,并且新数组长度+1,并将这个数标记为出现过,否则跳过该数。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int len=0;
map<int,int>mp;
for(int i=0;i<nums.size();i++)
{
if(!mp[nums[i]])
{
mp[nums[i]]=1;
nums[len++]=nums[i];
}
}
return len;
}
};