zoukankan      html  css  js  c++  java
  • leetcode 27. Remove Element

    移除给定的元素,可能移除多个,返回数组的长度

    var removeElement = function(nums, val) {
       
        for(var i = nums.length-1;  i>= 0; i--){
            var el = nums[i]
            if(el === val){
                nums.splice(i,1)
            }
        }
       
        return nums.length
    }
    

    不使用splice

    var removeElement = function (nums, val) {
          let n = nums.length,
            removeCount = 0,
            changeableLen = n;
    
          for (let i = 0; i < changeableLen; i++) {
            let el = nums[i];
            if (el === val) {
              let j = i
              removeCount++
              changeableLen = n - removeCount
              //全部前进一格
              while (j < changeableLen) {
                nums[j] = nums[j + 1]
                j++
              }
              i--;//可能nums[j-1]也等于val
            }
          }
          nums.length = changeableLen
          return changeableLen
        }
    

    使用后面的数取替 目标元素

    var arrayLength = nums.length;
      var i = 0;
      while(i < arrayLength) {
          if(nums[i] == val) {
              nums[i] = nums[arrayLength - 1];//找后面的元素代替它
              //注意这时,i没有变化,可能新的 nums[i] == val
              //但arrayLength变化,我们又可能取倒数第二,第三的元素代替它
              arrayLength--;
          } else {
              i++;
          }   
      }
      
      return arrayLength;
    }
    

    另一种两端移动删除的实现

     let i = 0, j = nums.length - 1;
        for(;;) {
            while(i < j && nums[i] !== val){
                  i++;
            }
            
            while(i < j && nums[j] === val){
                  j--;
            }
            
            if (i === j) {
                if (nums[i] === val) {
                    return i;
                }else{
                    return i+1;
                }
            } else if(i < j){
                     nums[i++] = nums[j--]; 
            }else{
                return i;
            }
           
        }
    
  • 相关阅读:
    python---基础部分
    自动化测试---Selenium IDE安装及操作
    自动化测试---Selenium IDE概念
    自动化测试----概念
    jmeter---后端监听器
    jmeter---分布式测试
    jmeter---runtime控制器
    什么是 MyBatis 的接口绑定,有什么好处?
    接口绑定有几种实现方式,分别是怎么实现的?
    Apache Shiro 的三大核心组件
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/12043520.html
Copyright © 2011-2022 走看看