题目描述:
思路:
1.遍历数组,删除重复元素
看完题目第一想法,遍历数组,删除数组中重复元素,输出操作完之后的新数组长度。
其中遍历一次数组,但由于进行了数组元素删除操作,浪费了很多的时间。时间复杂度O(n^2),占用额外空间O(1).
代码如下:
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
if(nums.size() == 0)
{
return 0;
}
int temp = nums[0];
int i = 1;
while(i < nums.size())
{
if(nums[i] == temp)
{
nums.erase(nums.begin() + i);
continue;
}
temp = nums[i];
i++;
}
return nums.size();
}
};
执行结果:
2.双指针
采用双指针将数组中不同的元素替换到数组前面,输出全部不重复元素个数。
时间复杂度O(n),占用空间O(1)。
代码如下:
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
if(nums.size() < 2)
{
return nums.size();
}
int i = 0;
for(int j = 1; j < nums.size(); j++)
{
if(nums[i] != nums[j])
{
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
};