知识点

模拟

思路

要求不能使用额外的空间,因为原数组的大小一定不小于不等于val的数量,所以可以记录一个大小sz,每次把对应的元素放到这个位置后 sz += 1

最后遍历整个数组之后,得到的sz就是题目的要求。

时间复杂度

遍历数组的每个位置最多2次,是线性复杂度的O(n)

AC code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param val int整型 
     * @return int整型
     */
    int remove_cows(vector<int>& nums, int val) {
        int sz = 0, n = nums.size();
        for (int i = 0; i < n; i ++) {
            if (nums[i] != val) {
                nums[sz ++] = nums[i];
            }
        }
        return sz;
    }
};