题目链接:26.删除排序数组中的重复项

题解:

嗯,简单题。

题目简述:

删除有序数组长度重复项,返回不重复元素的长度!

题解:

用两个指针一个指针t指向不重复元素的末尾,一个指针i指向当前扫描的位置,如果当前扫描位置和不重复元素的末尾相同,则继续后移,找到不一样的插到不重复元素的下一个位置。

最后返回长度,此处t指向下标,长度为t + 1.

注意:这样写需要特判nums为空的情况!

AC代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() == 0) return 0;
int t = 0;
for(int i = 0; i < nums.size();){
while(i < nums.size() && nums[i] == nums[t]) i++;
if(i < nums.size()) nums[++t] = nums[i];
}
return t + 1;
}
};

// 这样一写,更加简洁:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() == 0) return 0;
int t = 0;
for(int i = 0; i < nums.size(); i++)
if(nums[i] != nums[t])
nums[++t] = nums[i];
return t + 1;
}
};