leetcode 算法题:27. 移除元素

解法一:记录要删除的元素的索引,删除的时候要记录删除元素的数量,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;
};

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页