1、题目
tag:easy array
https://leetcode-cn.com/problems/remove-element/submissions/
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
2、实现
算法
当我们遇到 nums[i]=valnums[i]=val 时,我们可以将当前元素与最后一个元素进行交换,并释放最后一个元素。这实际上使数组的大小减少了 1。
请注意,被交换的最后一个元素可能是您想要移除的值。但是不要担心,在下一次迭代中,我们仍然会检查这个元素。
java
class Solution {
public int removeElement(int[] nums, int val) {
int len=nums.length;
int i=0;
while(i<len){
if(nums[i]==val){
nums[i]=nums[len-1];
len--;
}
else{
i++;
}
}
return len;
}
}
python
class Solution:
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
n=len(nums)
i=0
while i<n:
if nums[i]==val:
nums[i]=nums[n-1]
n=n-1
else:
i=i+1
return n;
3、注意
python里 len是保留字,不能作为变量名称,python里没有i++;