我在做这一题的时候用到了STL种find函数以及vector的erase函数,虽然空间复杂度满足要求,但是时间复杂度却不够优秀。代码如下,
class Solution
{
public:
int removeElement(vector<int>& nums, int val)
{
//先处理退化的情况
int N = nums.size();
if (nums.size() == 0)
return 0;
int count = 0;
auto it = nums.begin();
while(it != nums.end())
{
auto f_it = find(nums.begin(), nums.end(), val);
if(f_it != nums.end())
{
++count;
auto it = nums.erase(f_it);
}
else
break;
}
return N - count;
}
};
实际上,这道题完全可以借鉴,有序向量的唯一化操作,用非指定元素覆盖指定元素,知道遍历完整整个vector,其中一人的答案如下:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int n=nums.size();
int count=0;
for(int i=0;i<n;i++)
{
if(nums[i]!= val)
{
nums[count++] = nums[i];
}
}
return count;
}
};