zoukankan      html  css  js  c++  java
  • 数组去重 快慢指针

    题目:

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

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

    示例 1:

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

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

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

    /**
     * @param {number[]} nums
     * @return {number}
     */
    function comp(a,b){
        return a-b;
    }
    var removeDuplicates = function(nums) {
       nums.sort(comp);
       let i=0;
        for(let j=1;j<nums.length;j++){
            if(nums[i]!=nums[j]){
                i++;
                nums[i] = nums[j];
            }
        }
       return i+1;
    };

    实现:当数组顺序排序的时候,当慢指针指向的数据和快指针指向的数据相同的时候,就将慢指针向前加一步,直到找到和快指针指向的数据不同的数据,找到之后就将快指针加一

    将慢指针的值赋给快指针指向的数据,最后快指针指向的位置就是当前数组的最后一个数据,去重之后的数组长度就是快指针指向的数据索引加一

    数组去重的其他方式:
    1.ES6中的Set集合

    var removeDuplicates = function(nums) {
        return Array.from(new Set(nums));
    };
    console.log(removeDuplicates([1,1,2]))

    2.indexOf

    var removeDuplicates = function(nums) {
        let temp =[]
        for(let i=0;i<nums.length;i++){
            if(i == nums.indexOf(nums[i])){
                temp.push(i);
            }
        }
        return temp;
    };

    实现方式:判断当前的数据索引和利用IndexOf()查到的数据的索引是否相同,相同就将数据放到一个新的数组中,不相同就说明在本数组中还有一个和当前索引所对数据相同的数据。

    来源:https://segmentfault.com/a/1190000016418021?utm_source=tag-newest

    来源:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/solution/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-xiang-by-/

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    header
    panel----单个基础版
    vue-demo
    js不同类型变量比较
    reset.css
    关于各个浏览器的兼容问题
    git
    AMD与CMD区别
    喜欢前端的看过来哦
    js中数组去重的几种方法
  • 原文地址:https://www.cnblogs.com/panjingshuang/p/11623010.html
Copyright © 2011-2022 走看看