給定已排序數組,原地移除重複元素,使每個元素只出現一次,返回新長度。要求 O(1) 額外空間。
雙指針:`slow` 指向當前不重複部分的末尾,`fast` 掃描數組。當 `nums[fast] != nums[slow]` 時,`++slow; nums[slow] = nums[fast]`。最後新長度 = `slow + 1`。
class Solution {
public:
int removeDuplicates(vector& nums) {
if (nums.empty()) return 0;
int slow = 0;
for (int fast = 1; fast < nums.size(); ++fast) {
if (nums[fast] != nums[slow]) {
nums[++slow] = nums[fast];
}
}
return slow + 1;
}
};
有序數組去重經典雙指針模板,`slow` 維護不重複區間邊界,`fast` 探索新元素。同類問題:移除指定值、移動零等。