有的同学可能说了,多余的元素,删掉不就得了。
要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。
Java代码
class Solution {
public int removeElement(int[] nums, int val) {
int n = nums.length;
int left = 0;
for (int right = 0; right < n; right++) {
if (nums[right] != val) {
nums[left] = nums[right];
left++;
}
}
return left;
}
}
输出数组一定比输入数组小,可以用双指针。
而且,题目描述“
例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。
”摆明让你用双指针了。
双指针的灵魂:右指针 right 指向当前将要处理的元素,左指针 left 指向下一个将要赋值的位置。
下面是双指针的python代码,不知道为什么有点慢
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
if nums is None or len(nums) == 0:
return 0
right = 0
left = 0
while(right



