一、知识点:

数组、双指针

二、文字分析:

使用两个指针 i 和 j 分别指向当前要处理的元素和下一个要放置元素的位置。在遍历数组时,如果当前元素 nums[i] 不等于 val,就将其放置到 nums[j] 的位置,并将 j 的值加1。这样,遍历结束后,j 就指向了移动后的数组的长度。

因此时间复杂度为 O(n),其中 n 是数组的长度。由于算法只使用了常数个额外变量,空间复杂度为 O(1)。

三、编程语言:

java

四、正确代码:

import java.util.*;

public class Solution {
    /**
     * 移除数组中与 val 相同的元素,并返回移动后的数组的长度
     *
     * @param nums 整型数组,表示牛的位置坐标
     * @param val  整数,表示牧犬的位置
     * @return 移动后的数组的长度
     */
    public int remove_cows(int[] nums, int val) {
        int i = 0; // 指向当前要处理的元素
        int j = 0; // 指向下一个要放置元素的位置
        int n = nums.length;
        while (i < n) {
            if (nums[i] != val) {
                nums[j] = nums[i];
                j++;
            }
            i++;
        }
        return j;
    }
}