前言
题目是给一个非严格递增排列的数组nums 原 删除重复出现的元素,使每个元素只出现一次 返回删除后数组的新长度元素的相对顺序应该保持 一致 然后返回 nums 中唯一元素的个数。
一、C++代码
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() == 0)
{
return nums.size();
}
vector<int> L;
auto p = remove_if(nums.begin(), nums.end(), [&](int a)->bool
{
if(count(L.begin(), L.end(), a) >= 1)
{
return true;
}
else
{
L.push_back(a);
return false;
}
});
nums.erase(p, nums.end());
return nums.size();
}
};
这段代码最重要的就是使用remove_if将重复的元素移到vector的末尾,使用一个迭代器p记录下第一个重复元素的位置,使用erase删除。
remove_if中使用了一个lambda函数,获取所有数据,remove_if遍历vector的时候传给lambda函数一个int数据,使用count数元素在数组L中的数量,没有在L中出现过就返回false,出现就返回true。L的作用仅仅只是存放已经出现过的元素。