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