LeetCode With JS||26.Remove Duplicates from Sorted Array[数组去重,返回去重后的长度]

题目描述:
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,
Given input array nums = [1,1,2],
Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn’t matter what you leave beyond the new length.

示例Input:[1,1,2]
示例Output : 2

大白话:
输入一个数组,然后我们返回数组去重后的长度。题目乍眼一看挺简单的,唯一的难点就是不能申请额外空间

原题目连接26. Remove Duplicates from Sorted Array

思路一:[Time Limit Exceeded]
读完题目之后“首当其冲”[首先冲到脑子里]的思路就是:
比较数组里的数据前一个与后一个是否相同,如果相同则在数组里去掉那一个,然后返回新的数组长度。
代码示例:

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

这个思路可以说就是把题目翻译了一下顺着做,而且我知道,以我的菜鸟惯性,首当其冲的思路绝对不是什么好思路。。。 = =
虽然运行是对的但是emmmm……果不其然,超时了
这里写图片描述

思路二:
在不申请额外数组存放的前提下,百思不得其解后,终于一个想法憋出来了..还算是以一个尚算优美的姿态AC了[得意の笑]
运行时间 149ms
老规矩先贴代码

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

思路:
妙就妙在用nums[j]=nums[i]的方法存储了未重复的数据,避免了新开额外数组空间存放。
让标记i从数组的第二个元素开始循环,标记j从第一个元素开始,[j=0,i=1]
如果第i个元素与第j个元素相同,那么不管;
如果第i个元素与第j个元素不同,则j++,并让nums[j]=nums[i];
从而前j个数据全是未重复的数据,长度即是j+1;

以测试数据[1,1,2,3,4,4]为例
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值