合并已排序的数组

前端精髓

共 1542字,需浏览 4分钟

 ·

2021-07-29 12:35


条件:

两个数组分别已经升序排列。


要求:

合并两个数组并返回新的已经排序后的数组。


分析该题目,其要求与归并排序的实现思想相同。


归并排序的算法中,使用“分治”策略,而这道题的实现逻辑,仅需要用到归并算法中的“治”。


function mergeArray(first, sec) {  var temp = new Array(first.length + sec.length)  var t = 0
var i = 0 var j = 0 // 取较短的数组作为loop条件 var mid = (first.length <= sec.length) ? first.length - 1 : sec.length - 1 while (i <= mid && j <= mid) { //关键的逻辑在于这行 temp[t++] = (first[i] < sec[j]) ? first[i++] : sec[j++] }
// 将first数组中剩余的元素追加到temp while (i <= first.length - 1) { temp[t++] = first[i++] } // 将sec数组中剩余的元素追加到temp while (j <= sec.length - 1) { temp[t++] = sec[j++] }
return temp}


前面的实现,并未能去除重复的元素,增加题目的要求。


合并后的数组,如果包含相同元素,则只保留一个。


function mergeArray(first, sec) {  var temp = []  var t = 0
var i = 0 var j = 0 var k // 取较短的数组开始loop var mid = (first.length <= sec.length) ? first.length - 1 : sec.length - 1 while (i <= mid && j <= mid) { //关键的逻辑在于这行 k = (first[i] < sec[j]) ? first[i++] : sec[j++] //过滤重复元素 if (t > 0 && k == temp[t - 1]) continue temp[t++] = k }
// 将first数组中剩余的元素追加到temp while (i <= first.length - 1) { k = first[i++] if (t > 0 && k == temp[t - 1]) continue temp[t++] = k } // 将sec数组中剩余的元素追加到temp while (j <= sec.length - 1) { k = sec[j++] if (t > 0 && k == temp[t - 1]) continue temp[t++] = k }
return temp}


以上的数组合并只是两个数组,继续引申出,多个有序数组进行合并,并去重排序。


浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报