题目给定一个vector<int>数组,要求把不重复的length个数字移动到该数组的最前面,返回int length。
我做的答案如下:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int i=0,j=1;
if(nums.size()<=1)
return nums.size();
while(j<nums.size()){
if(nums[j]>nums[i])
nums[++i] = nums[j];
j++;
}
return i+1;
}
};
因为是已经排好序的数组,所以只需要把第一个比nums[i]大的nums[j]移动到前面就可以了。
leetcode上面速度更快的答案:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int sz = nums.size();
if( sz == 0 ) return 0;
int p=1; // 初始化长度为1
int v = nums[0];
for( int i=1; i<sz; ++i){
if( nums[i] != v ) {
v = nums[i]; // 新的不重复元素
if( p != i) {
nums[p] = nums[i]; //将不重复元素挪到前面
}
p++;
}
}
nums.resize(p); // 调整nums的大小为p个元素,多出的元素丢弃。(其实题目并没有要求把重复的元素都删除掉)
return p;
}
};