删除有序数组中的重复项

跟上个题很像。同样是双指针解法

设置快慢指针f,s

初始时s=0,f=1。

  1. 如果nums[s]不等于nums[f]说明不重复,f++,s++。

  2. 如果nums[s]等于nums[f]说明重复,f++。

替换操作nums[++s]=nums[f++],可以合并到第1步。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int s=0;
int n=nums.size();
for(int f=1;f<n;f++){
if(nums[f]-nums[s]){
nums[++s]=nums[f];
}
}
return s+1;
}
};

做完下一道题后重新写这道题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n=nums.size();
if(n<2) return n;
int s=1,f=1;
while(f<n){
if(nums[f]-nums[s-1]){
nums[s]=nums[f];
s++;
}
f++;
}
return s;
}
};