思路
使用双指针法,用快指针找到下一个不相同的元素,用慢指针维护结果数组。
整个过程就是用快指针遍历一次数组,一次时间复杂度是
O
(
n
)
O(n)
O(n)。
代码
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0)
return 0;
int i = 0, j = 1;
while (j < nums.size()) {
// 找到下一个不相同的数字
while (nums[i] == nums[j]) {
j++;
// 到达边界返回
if (j == nums.size())
return i + 1;
}
nums[++i] = nums[j++];
}
return i + 1;
}
};