一、知识点:
数组、双指针
二、文字分析:
使用两个指针 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; } }