合并两个升序数组

合并两个升序数组

难度:简单

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);
};

评论