1. 题目
Remove Duplicates from Sorted Array
去除数组中的重复元素,返回新数组的长度
数组中的每个元素只允许出现1次
如[1,1,2,2,2,3],生成新数组为[1,2,3]
2. 分析
1: 数组已经有序,所以重复元素一定相邻
从[1,len)遍历数组,依次与新数组的最后1个元素比较即可
若数组长度<=2,则返回值为数组长度
2: 解法2跟解法3都借助STL实现,可能不符合面试时手写代码的要求
3. 代码
1)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int len = nums.size();
if(len <= 1)
return len;
int index = 1;
for(int i = 1; i < len; ++i)
{
if(nums[i] != nums[index - 1])
{
nums[index] = nums[i];
++index;
}
}
return index;
}
};
2)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
auto last = unique(nums.begin(), nums.end());
return distance(nums.begin(), last);
}
};
3)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
auto last = removeDuplicates(nums.begin(), nums.end(), nums.begin());
return distance(nums.begin(), last);
}
template<typename InIt, typename OutIt>
OutIt removeDuplicates(InIt first, InIt last, OutIt output) {
while(first != last)
{
*output++ = *first;
first = upper_bound(first, last, *first);
}
return output;
}
};
完整源代码放于github
相关代码:
LeetCode-80. Remove Duplicates from Sorted Array II