题目:80. 删除有序数组中的重复项 II
思路:左指针 left 类似于指向栈顶的下一个待填的元素,每次遍历只需看当前元素nums[i]和栈顶的下一个元素nums[left-2]是否相等,不等就可以插入栈当中。时间复杂度0(n)。
C++版本:
cpp
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int left=2;
for(int i=2;i<nums.size();i++){
if(nums[left-2]!=nums[i]){
nums[left]=nums[i];
left++;
}
}
if(left>nums.size()) return nums.size();
return left;
}
};
JAVA版本:
java
class Solution {
public int removeDuplicates(int[] nums) {
int left=2;
for(int i=2;i<nums.length;i++){
if(nums[left-2]!=nums[i]){
nums[left]=nums[i];
left++;
}
}
if(left>nums.length) return nums.length;
return left;
}
}
Go版本:
go
func removeDuplicates(nums []int) int {
left:=2
for i:=2;i<len(nums);i++ {
if nums[left-2]!=nums[i] {
nums[left]=nums[i]
left++
}
}
if left>len(nums) {
return len(nums)
}
return left
}