为了账号安全,请及时绑定邮箱和手机立即绑定

js数组操作问题

js数组操作问题

ibeautiful 2019-05-20 17:45:36
给定一个有序不重复数组arr1=[a1,a2,....,an],一个该数组的子集arr2=[b1,b2,....,bn](顺序与arr1一致)任意给定一个arr1的元素ai,请将其插入arr2并保证顺序与arr1的顺序一致比如arr1[3,5,4,8],arr2[5,8]现在要把4插入到arr2需要结果为[5,4,8]求一个优雅的运算方法---------------分割线-------------我采纳了@hkuclion的答案并作了小小的修改letsource=[3,5,4,8];lettarget=[5,8];letneedle=4;letsource_index=source.indexOf(needle);if(source_index!==-1){lettarget_index=-1;while(source_index&&target_index===-1){target_index=target.indexOf(source[--source_index]);}target.splice(target_index+1,0,needle);}
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

尝试下面代码
letsource=[3,5,4,8];
lettarget=[5,8];
letneedle=4;
letsource_index=source.indexOf(needle);
if(source_index!==-1){
lettarget_index=source_index?target.indexOf(source[source_index-1])+1:source_index;
target.splice(target_index,0,needle);
}
                            
查看完整回答
反对 回复 2019-05-20
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

还是二分修改一下比较的方式就行
letarr1=[3,5,4,8]
letarr2=[5,8]
letindexMap={}
for(leti=0;iindexMap[arr1[i]]=i
}
insert(arr2,0,arr2.length,4)
console.log(JSON.stringify(arr2))
functioninsert(arr,l,r,num){
if(l==r){
arr.splice(l,0,num)
return
}
letindex=parseInt((r+l)/2)
if(indexMap[arr[index]]insert(arr,index+1,r,num)
}else{
insert(arr,l,index,num)
}
}
                            
查看完整回答
反对 回复 2019-05-20
  • 2 回答
  • 0 关注
  • 368 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信