您的位置:首页 > 其它

Leetcode 27. Remove Element

2017-12-29 10:09 302 查看
题目的意思是给定一个数组和一个值,让在不开辟额外空间的情况下删掉数组中该值,并且返回除去该目标值之后数组的新长度。数组中元素的顺序可以发生变化。

方法1:把目标值都删掉,然后返回数组的长度。每次erase的代价是O(n),算法时间复杂度O(n2)。

class Solution {
public:
int removeElement(vector<int>& nums, int val) {
for(int i=0; i<nums.size(); ++i)
{
if(nums[i]==val)
{
nums.erase(nums.begin()+i);
i--;
}
}
return nums.size();
}
};


方法2:最好的方法:从283题可以看出,换不如直接搬好。

class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int j=0;
for(int x:nums)
{
if(x!=val)
nums[j++]=x;
}
return j;
}
};


其他方法:
方法3:为了降低时间复杂度,可以先排个序,将目标值集中在一处进行批量删除,批量删除erase的时间复杂度是O(n),算法的时间复杂度是O(nlogn)。

方法4:题目要求不能开辟新的空间,所以想到设置两个头尾指针进行元素互换,将所有目标值都换到数组的尾部。时间复杂度O(n)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode