03.删除有序数组中的重复元素
删除有序数组中的重复元素
LeetCode链接
解题思路
1.使用API解决
解题思路
- 遍历,判断相邻两个元素是否相等
- 相等:就使用 erase() 函数删除多余元素;反之, 指针后移
代码流程
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
for(vector<int>::iterator it = nums.begin(); it != nums.end() - 1;){
if(*it == *(it + 1)) {
nums.erase(it+1);
}else{
it++;
}
}
return nums.size();
}
};
复杂度分析
时间复杂度:O(log(n))
空间复杂度:O(1)
2.双指针
解题思路
- 使用两个指针,slow 和 fast ,slow 指向可覆盖位置,fast 用于遍历
- 遍历,比较快慢指针位置的值
- 相等,将 fast 指向的值赋值给 slow ,slow ++;反之 fast++,直至数组末尾
代码流程
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() == 0) return 0;
int slow = 1, fast = 1;
while( fast < nums.size()){
if(nums[slow - 1] != nums[fast]){
nums[slow++] = nums[fast];
}
fast++;
}
return slow;
}
};
复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)
总结
利用快慢指针保存可覆盖位置和用于遍历实现数据的删除
浙公网安备 33010602011771号