解法一:记录要删除的元素的索引,删除的时候要记录删除元素的数量,splice的时候就减去变化的值(正向)
var removeElement = function(nums, val) {
var arr = []
for(let i = 0 ; i<nums.length;i++){
if(nums[i] == val) {
arr.push(i)
}
}
var j = 0;
for(var a of arr){
nums.splice(a-j,1)
j ++;
}
return nums.length
};
更简洁的方式:
var removeElement = function(nums, val) {
for(var i =0;i<nums.length;i++){
if(nums[i]==val){
nums.splice(i,1)
i--
}
}
return nums.length
};
解法二:逆序删除的话,不用考虑数组序号变化问题
var removeElement = function(nums, val) {
for(let i=nums.length;i--;){//倒序循环,for循环最后一个条件不写的,默认计算到0
nums[i]===val&&nums.splice(i,1);//直接splice,数组长度变化影响不到后继处理
}
return nums.length;
};