考察知识点: 数组、双指针

题目分析:

可以通过双指针解决题目。首先用指针i遍历整个数组,指针j用来改变数组。每当i遍历到val时,总是让j停下来一步,当指针i指向的值不是val时就覆盖到指针j所指向的数组上。例如:2 1 3 5 7 1 1 1 6 9, val = 1

一开始i和j的指针位置相同,而当i指向val时,j指针就会停下来一步:

此时发现i指向的数据为3,将3覆盖到指针j指向的位置即可。之后发现将i的指针赋值到j的位置时,相当于数组往前移动1位,即找到多少个val后,j与i之间就会相差多少,数组就能前移多少。

所用编程语言:C++

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