此题不难。与Leetcode-26: Remove Duplicates from Sorted Array 有点像。我的解法还是用i,j两个指针,遍历一遍即可。
注意:
1) 在nums[i]==nums[j]的情况下,i,j对应的元素必须交换,而不是仅仅将nums[i]=nums[j]。以a[]={3,2,2,3,4}为例,如果仅仅将nums[i]=nums[j],最后a[]={2,2,2},长度为3。
2) 与Leetcode-26不同,最后本题必须返回i,而不是i+1。因为本题是将与val相同的元素都删掉了,而Leetcode-26对于重复元素还要留一个,而不是全删。
#include <iostream>
#include <vector>
using namespace std;
int removeElement(vector<int>& nums, int val) {
if (nums.size()==0) return 0;
int i=0, j=0;
while(i<nums.size() && j<nums.size()) {
while (nums[j]==val) j++;
if (j<nums.size()) {
if (nums[i]==val) {
int temp=nums[i]; nums[i]=nums[j]; nums[j]=temp;
}
i++; j++;
}
}
for (size_t k=0; k<min((size_t)(i), nums.size()); k++)
cout<<nums[k]<<" ";
cout<<endl;
return i;
}
int main()
{
//vector<int> a={1,1,2,3,4,5,5,6,8,9};
//vector<int> a={1,1};
vector<int> a={1,2};
//vector<int> a={3,2,2,3};
//vector<int> a={3,2,2,3,4};
cout<<removeElement(a, 3)<<endl;
return 0;
}
sdaf