JS算法题目4
对比两个数组,input中比data中多了哪些元素?放入add。对比data中少了哪些元素?放入del
例:
let data = [5,6,8,10];
//输入:
let input = [5,8,10,15,18];
let add = []
let del = []
//输出:
add => [15,18] //因为input对比data多了15和18
del => [6] //因为input对比data少了6
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
好像以前回答过类似的问题,懒得去找了,也懒得写了,给你个思路
思路一
遍历
input
,对每个元素去data
中查找,找不到的就是多的。返过来,遍历
data
,每个元素去input
中查找,找不到的就是少的。这个方法最简单易行
Lodash 的
_.difference()
可以快速实现单向排除自己简单实现
_.difference
:思路二
对
input
和data
排序,用双指针(序号)遍历,挨个查找。查找过程中,如果数组1在序号1位置的值1已经大于数组2在序号2位置的值2,还没有找到值2,那说明值2是数组2中有但数组1中没有的,此时调过来从
数组2[序号2+1]
开始跟数组1[序号1]
比较直到数组2当前位置的值大于数组1当前位置的值……这个写起来麻烦,不想写了。
在跟 @jsdeferred 讨论的过程中发现 @jsdeferred 的代码有点小问题,比如处理这样一个用例的时候:
输出(我把结果改成对象了)
下面是我根据 @jsdeferred 的思路写的代码:
又研究了一下
make
可以写成一句话(纯为了好耍)