js实现删除排序数组中的重复项

题目

算法的题目

题解

方法1

遍历移除法
这是一个有序数组,就是有重复的元素一定是挨在一起的,所以我们循环遍历,要是发现当前元素和后面元素相同,只需要删除当前的元素就可以。所以我们要用splice方法

array.splice(index,howmany)

这个方法就是指定序号进行删除

var nums = [1,1,2];
for(var i =0;i<nums.length;i++){
if(nums[i] === nums[i+1]){
nums.splice(i,1);
i--;
}
}
console.log(nums);//[1,2]
console.log(nums.length);//2

第一轮循环,i=0,那么num[i]与num[i+1]相等都是1,现在删除第一个元素1,现在数组就变成[1,2].
i–=0-1=-1
第二轮循环,i进行i++,变成i=0,num[i]与num[i+1]不等。
第三轮循环,i=0后,后面没有数字了就没法对比了。现在就可以返回当前数组的长度了
在这里插入图片描述

方法2

双指针法
[2,2,4,4,4,6]
我们换个思维,题目是删除重复项,结果需要我们返回的是移出后的数组,也就是说现在这个数组我们可以变为[2,4,6,2,4,4].不管数组后面变成什么样前面的2,4,6是我们需要的,然后返回前面所需要的数组长度就可以了(长度3)。这个方法的核心是把后面的元素替换为前面重复的元素,我们只需要管理不重复元素,为了判断前后元素是否相同,所以要双指针
父子来果园摘果子,每个水果只能摘一次,父子计划分工合作。最开始父子俩站在起点,发现了一个草莓,于是放到篮子里,父亲不愿意让儿子累着,让儿子提着篮子在原地等候自己大步向前,发现第二个草莓没有动手摘然后继续向前发现了一个哈密瓜,然儿子向前一步,然后把哈密瓜给了儿子
无描述
之后发现哈密瓜都没有捡,然后发现了西瓜,让儿子向前一步,把西瓜给了儿子。然后篮子里有不同的水果并且没重复。现在儿子站的地方和篮子里的水果数量相同,所以知道儿子的位置就知道了水果数量
图片源于b站蛋老师

var nums = [2,2,4,4,4,6];
for(var son = 0,dad = 0;dad<nums.length;dad++){
if(nums[son]!==nums[dad]){
son++;
nums[son] = nums[dad];

     }
}
console.log(son+1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值