题中要删除给定的排序数组的重复数字,所以可以使用两个量来遍历整个数组,使用 i 和 j ,i 用来表示出现了重复数字的位置,j 用来向后遍历数组,直到找到不重复的数字,再复制到 i 所在位置的后面。
最后可以重新设定vector<int> 的大小,使用 nums.resize(size type) ,这样得出的新的集合就不存在重复元素。
题中要求不要使用额外的空间,所以这道题的空间复杂度为O(1)。
class Solution {
public:
/*
* @param nums: An ineger array
* @return: An integer
*/
int removeDuplicates(vector<int> &nums) {
// write your code here
int num = nums.size();
if(num == 0) return 0;
int i = 0;
for(int j = 1; j < num; j++)
{
if(nums[i] != nums[j])
{
i++;
nums[i] = nums[j];
}
}
nums.resize(i + 1);
return nums.size();
}
};
2018/1/25