难度:简单
Description
合并两个升序数组,返回合并后的数组,合并后的数组依然为升序,元素不能重复。
Solution
方法一:从前往后一次对比两个数组的元素,小的 push
到新数组。
方法二:先拼接两个数组,再去重,最后排序。
排序导致了该方法效率低。
Code
方法一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| let list1 = [1, 3, 5, 6, 7]; let list2 = [2, 3, 4, 8, 9];
mergeLists(list1, list2);
const mergeLists = function(l1, l2) { const L1_LEN = l1.length; const L2_LEN = l2.length;
if (!L1_LEN) return l2; if (!L2_LEN) return l1;
let target = []; let i = 0, j = 0; while (i < L1_LEN && j < L2_LEN) { if (l1[i] < l2[j]) { target.push(l1[i]); i++; } else if (l1[i] > l2[j]) { target.push(l2[j]); j++; } else { target.push(l1[i]); i++; j++; } }
if (i > j) { target = target.concat(l2.slice(j)); } else { target = target.concat(l1.slice(i)); }
return target; };
|
方法二
1 2 3 4 5 6 7 8 9 10 11 12 13
| let list1 = [1, 3, 5, 6, 7]; let list2 = [2, 3, 4, 8, 9];
mergeLists(list1, list2);
const mergeLists = function(l1, l2) { if (!l1.length) return l2; if (!l2.length) return l1;
let target = l1.concat(l2); target = [...new Set(target)]; return target.sort((a, b) => a - b); };
|