lintcode-172-删除元素

172-删除元素

给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。
元素的顺序可以改变,并且对新的数组不会有影响。

样例

给出一个数组 [0,4,4,0,0,2,4,4],和值 4
返回 4 并且4个元素的新数组为[0,0,0,2]

标签

数组 两根指针

思路

将待删除元素放入数组尾部,记录个数,然后将数组尾部元素删除即可

code

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 size = A.size(), elemSize = 0, i = 0;
        if (size <= 0) {
            return 0;
        }
        
        while (i < size - elemSize) {
            if (A[i] == elem && A[size - 1 - elemSize] != elem) {
                swap(A[i], A[size - 1 - elemSize]);
                elemSize++;
                i++;
            }
            else if (A[i] == elem && A[size - 1 - elemSize] == elem) {
                elemSize++;
            }
            else if (A[i] != elem && A[size - 1 - elemSize] == elem) {
                elemSize++;
                i++;
            }
            else {
                i++;
            }
        }
        for (i = 0; i < elemSize; i++) {
            A.pop_back();
        }
        return size - elemSize;
    }
};
posted @ 2017-08-03 10:18  LiBaoquan  阅读(283)  评论(0编辑  收藏  举报