26. Remove Duplicates from Sorted Array 已排序数组原地去重
26. Remove Duplicates from Sorted Array 已排序数组原地去重
第一次解法:多情况讨论
int removeDuplicates(vector<int>& nums) {
if (nums.size() <= 1) return nums.size();
nums.push_back(nums[nums.size()-1]);
int l=0;
bool d=false;
for(int j=1, prev=nums[0];j<nums.size();++j) {
if (!d && nums[j]==prev) d=true, ++l;
else if (d && nums[j]!=prev) nums[l++] = prev = nums[j];
else if (!d && nums[j]!=prev) prev=nums[++l];
}
return l;
}更好的解法:步长计数
int removeDuplicates(vector<int>& nums) {
int count=0;
for(int i=1;i<nums.size();++i) {
if (nums[i]==nums[i-1]) ++count;
else nums[i-count] = nums[i];
}
return nums.size()-count;
}类似问题:去除某个元素值 题目描述
int removeElement(vector<int>& nums, int val) {
int count=0;
for(int i=0;i<nums.size();++i) {
if (nums[i]==val) {
++count;
} else {
nums[i-count]=nums[i];
}
}
return nums.size()-count;
}类似问题:去重排序数组,元素至多出现 2 次? 题目描述
int removeDuplicates(vector<int>& nums) {
if (nums.size()<=1) return nums.size();
int i=0;
for(auto n : nums) {
// 保证第三次重复的元素不会被放进 [0~i] 中
if (i<2 || n>nums[i-2]) nums[i++]=n;
}
return i;
}#array