easy程度题
题目:
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,
Given input array nums = [1,1,2],
Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.
It doesn't matter what you leave beyond the new length.
AC解:
class Solution
{
public:
int removeDuplicates(vector<int>& nums)
{
if (nums.empty())
return 0;
int index = 0;
int vec_size = nums.size();
for (int i = 1;i < vec_size;i++)
if(nums[index] != nums[i])
{
index++;
nums[index] = nums[i];
}
return index + 1;
}
};问题进化版,每个数最多允许重复两次
AC解:
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
int v_size = nums.size();
if(v_size <= 2)
return v_size;
int index = 2;
for (int i = 2;i < v_size;i++)
if(nums[index - 2] != nums[i])
{
nums[index] = nums[i];
index++;
}
/*if (v_size > index)
nums.erase(nums.begin() + index,nums.begin() + v_size);*/
return index;
}
};

本文介绍了一种在排序数组中去除重复元素的算法,并提供两段C++代码实现。第一段代码实现了只保留一个实例的要求,而第二段代码则允许每个元素最多出现两次。这两种方法都不使用额外的空间,满足常数内存限制。
1080

被折叠的 条评论
为什么被折叠?



