给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
我的方法在每一次判断是否相等的逻辑后面都加了一个是否到达末端的判断,总觉得还可以简化一下。
python:
class Solution:
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
if len(nums) == 0:
return len(nums)
res,index = 0,0
n = len(nums)
for i in range(n):
while index < n:
if nums[index] == val:
if index == n-1:
return res
else:
index += 1
else:
nums[i] = nums[index]
res += 1
if index == n-1:
return res
else:
index += 1
break
C++:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int n = nums.size();
if(n == 0) return n;
int res = 0;
int index = 0;
for(int i = 0; i < n; i++){
while(index < n){
if(nums[index] == val){
if(index == n-1) return res;
else index += 1;
}
else{
nums[i] = nums[index];
res += 1;
if(index == n-1) return res;
else index += 1;break;
}
}
}
}
};