描述
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。
元素的顺序可以改变,并且对新的数组不会有影响。
样例
给出一个数组 [0,4,4,0,0,2,4,4],和值 4
返回 4 并且4个元素的新数组为[0,0,0,2]
思考
- 原先以为是将 [0, 1, 1, 2, 2] -> [0, 2 , 2] ;
- 实际上题目的是 [0, 1, 1, 2, 2] -> [0, 2, 2, 1, 1],并不要求删除原先的数字,只需要对前面的数字进行覆盖就好
代码
// By Lentitude
// 第一种情况代码
class Solution {
public:
/**
*@param A: A list of integers
*@param elem: An integer
*@return: The new length after remove
*/
int removeElement(vector<int> &A, int elem) {
// write your code here
if (A.empty()) return 0;
for (int i = 0; i != A.size(); ++i){
while (A[i] == elem){
A.erase(A.begin() + i);
}
}
return A.size();
}
};
// By Lentitude
// 第二种情况代码
class Solution {
public:
/**
*@param A: A list of integers
*@param elem: An integer
*@return: The new length after remove
*/
int removeElement(vector<int> &A, int elem) {
// write your code here
int i = 0, j = 0;
int len = A.size();
int ret = 0;
while(j < len){
if(A[j] != elem){
++ret;
A[i]=A[j];
++i;
}
++j;
}
return ret;
}
};