数组中删除重复项和移除元素
删除重复项
我的解法
int removeDuplicates(vector<int>& nums) {
vector<int>::iterator itor;
for (int i = 0; i < nums.size(); i++) {
int j = i + 1;
for (itor = nums.begin()+j; itor != nums.end(); itor++) {
if (*itor == nums.at(i)) {
itor = nums.erase(itor);
i--;
break;
}
}
}
return nums.size();
}
leetcode解法
int removeDuplicates(int[] nums) {//双指针
if (nums.length == 0) return 0;
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
移除元素
我的解法
int removeElement(vector<int>& nums, int val) {
vector<int>::iterator itor;
for (itor = nums.begin(); itor != nums.end();) {//for循环可以这样使用
if (*itor == val) {
itor = nums.erase(itor);//erase返回nums数组的下一个元素地址
}
else itor++;
}
return nums.size();
}
leetcode解法
- 双指针
int removeElement(int[] nums, int val) {
int i = 0;
for (int j = 0; j < nums.length; j++) {
if (nums[j] != val) {
nums[i] = nums[j];
i++;
}
}
return i;
}
- 双指针——当要删除的元素很少时
int removeElement(int[] nums, int val) {
int i = 0;
int n = nums.length;
while (i < n) {
if (nums[i] == val) {
nums[i] = nums[n - 1];
// reduce array size by one
n--;
} else {
i++;
}
}
return n;
}