https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
給你一個有序數(shù)組 nums 陈症,請你 原地 刪除重復出現(xiàn)的元素应役,使每個元素 只出現(xiàn)一次 罗标,返回刪除后數(shù)組的新長度显沈。
不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用 O(1) 額外空間的條件下完成志电。
我的方法一:快慢指針
步驟
- slow和fast的指針分別指向去重后的最后一位和正在遍歷的一位
- 如果slow和fast對應的值一樣曙咽,說明重復了,所以忽略fast對應的值挑辆,將fast向后挪一位
- 如果slow和fast對應的值不一樣例朱,說明不重復,所以先將slow往后挪一位鱼蝉,將fast對應的值設置給slow洒嗤,然后fast也往后挪一位;
初始條件
- slow=0 fast=1
邊界條件
- 長度必須大于1魁亦,小于等于1直接返回原始長度即可
- 去重后的長度是slow++渔隶,因為slow是位置,長度需要+1
代碼
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() < 2) {
return nums.size();
}
int n = nums.size();
int slow = 0;
int fast = 1;
while(fast < n) {
if(nums[fast] == nums[slow]) {
fast++;
}else{
nums[++slow] = nums[fast++];
}
}
return ++slow;
}
};