题目描述:
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。
这道题目做暴力的想法就是,用一个指针从头到尾遍历,删除哪个元素就把后面的元素统一向前移动一个位置。但是这样的时间复杂度很大,可能要移动很多的元素。
这里利用快速排序中划分的一种思想:用两个指针,后一个指针做遍历用,前一个指针作为一个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; }