C++程序 从排序数组中删除重复项
在C++中,我们可以通过以下的代码来从排序好的数组中删除重复项。
#include <iostream>
#include <vector>
using namespace std;
int removeDuplicates(vector<int>& nums) {
if (nums.empty()) {
return 0;
}
int j = 0;
for (int i = 1; i < nums.size(); i++) {
if (nums[i] != nums[j]) {
j++;
nums[j] = nums[i];
}
}
return j + 1;
}
int main () {
vector<int> nums {1, 1, 2, 2, 3, 4, 4, 5};
cout << "before removal: ";
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] << " ";
}
cout << endl;
int len = removeDuplicates(nums);
cout << "after removal: ";
for (int i = 0; i < len; i++) {
cout << nums[i] << " ";
}
cout << endl;
return 0;
}
上面的代码使用了一个int
变量j
来记录非重复数的下标,从第二个数开始遍历,如果当前数nums[i]
与上一个数不相等,则表示是一个新的非重复数,将其存到原数组中。最后返回j + 1
,即为剩余元素的长度。
我们来测试一下这个程序。假设原数组是{1, 1, 2, 2, 3, 4, 4, 5}
,运行结果如下所示:
before removal: 1 1 2 2 3 4 4 5
after removal: 1 2 3 4 5
可以看到,重复的元素已经被删除,只剩下独一无二的元素了。
结论
以上就是从排序数组中删除重复项的C++程序,通过一些技巧来提高删除效率,可以在运行时间上得到优化。