[研究生冲刺][算法实习生]LeetCode刷题日记(Day8)【欢迎关注,一起努力!Cheers!】
26. 删除排序数组中的重复项
思路:
设置一个last来记录上一个元素的值,如果当前元素与上一个元素相同则删除之(使用vector自带的erase函数即可)。要注意的有以下两点:①如果数组为空直接返回0即可;②在循环中不能使用nums.size() 而是最好用一个常数记录,因为删除元素后nums.size() 会改变。
算法的复杂度:
算法的时间复杂度为O(n),空间复杂度为O(1)。
代码:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() == 0)
return 0;
int last = nums[0];
int n = nums.size();
int index = 1;
for(int i = 1; i < n; ++i)
{
if(nums[index] == last)
nums.erase(nums.begin() + index);
else
{
last = nums[index];
++index;
}
}
return nums.size();
}
};