zoukankan      html  css  js  c++  java
  • 1、从排序数组中删除重复项

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

    不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

    示例 1:

       给定数组 nums = [1,1,2];

      函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 

    你不需要考虑数组中超出新长度后面的元素。

    示例 2:

       给定 nums = [0,0,1,1,1,2,2,3,3,4];

      函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

    你不需要考虑数组中超出新长度后面的元素。
    

    说明:

    为什么返回数值是整数,但输出的答案是数组呢?

    请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

    你可以想象内部操作如下:

    // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
    int len = removeDuplicates(nums);
    
    // 在函数里修改输入数组对于调用者是可见的。
    // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
    for (int i = 0; i < len; i++) {
        print(nums[i]);
    }

    -----------------------------------------------------------
    解答:Js版本

    var removeDuplicates = function(nums) {
      if(nums.length==0) return 0;
      var i=0;
      for(var j=1;j<nums.length;j++){
        if(nums[i]!=nums[j]){
          i++;
          nums[i]=nums[j];
        }
      }

      return i+1;
    };

     复杂度分析:

       时间复杂度:O(n)O(n), 假设数组的长度是 nn,那么 ii 和 jj 分别最多遍历 nn 步。

      空间复杂度:O(1)O(1)。

      这道题需要修改原数组并返回数组的长度。

     其它:如果是只是删除重复的元素,就好做多了。

      js 数组的方法有:

        (1)、concat()  连接两个或更多的数组,并返回结果

                var arr1=[1,2,3],

          arr2=[4,5,6];

                arr1.concat(arr2);  //[1,2,3,4,5,6]   

                注:如果有重复元素,则不会合并。

       (2)、join()  用于把数组中的元素连成字符串。默认分隔符为逗号(,)

              var arr=['A','B','C'];

              arr.join();  //"A,B,C"

       (3)、pop()   //删除并返回数组的最后一个元素。

       (4)、push()  方法可向数组末尾添一个或多个元素,并返回数组的长度。

       (5)、reverse()  翻转数组中元素。

       (6)、shift()  删除数组中第一个元素,并返回该元素,(直接修改原数组)

       (7)、slice(start,end) 选取数组中部分元素。

       (8)、sort() 排序,

    默认是按字母排序,如果需要按数字大小,可以传递一个函数
    function sortby(a,b){
      return a-b;
    }

       (9)、unshift()  向数组的头部添加元素,并返回数组的长度

       (10)、splice(位置,删除的条目,插入的元素)    //向/从数组中添加/删除项目,然后返回被删除的项目

      

      

       
  • 相关阅读:
    反转链表 16
    CodeForces 701A Cards
    hdu 1087 Super Jumping! Jumping! Jumping!(动态规划)
    hdu 1241 Oil Deposits(水一发,自我的DFS)
    CodeForces 703B(容斥定理)
    poj 1067 取石子游戏(威佐夫博奕(Wythoff Game))
    ACM 马拦过河卒(动态规划)
    hdu 1005 Number Sequence
    51nod 1170 1770 数数字(数学技巧)
    hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)
  • 原文地址:https://www.cnblogs.com/coderblog/p/10416509.html
Copyright © 2011-2022 走看看