删除数组中等于某个key的所有元素

题目描述:

给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。

这道题目做暴力的想法就是,用一个指针从头到尾遍历,删除哪个元素就把后面的元素统一向前移动一个位置。但是这样的时间复杂度很大,可能要移动很多的元素。

这里利用快速排序中划分的一种思想:用两个指针,后一个指针做遍历用,前一个指针作为一个tag,表示这个tag之前的元素都满足要求

那么具体的代码:

int removeElement(vector<int> &arr, int elem) 
{
	// write your code here
	int size = arr.size();
	if(size == 0)
	{
		return 0;
	}
	int pre = -1;
	for(int cur = 0; cur < size; ++cur)
	{
		if(arr[cur] != elem)
		{
			++pre;
			if(cur != pre)
			{
				swap(arr[pre], arr[cur]);
			}
		}//if
	}//for
	
	return pre + 1;
}

  

posted @ 2015-10-27 20:39  stemon  阅读(311)  评论(0编辑  收藏  举报