很迷,这道题想了好久,写了好几种解法,然后发布这篇文章之前又改了一次。现在的方案和代码量是我能想到的最优解。
难点在于如何在程序比较两个元素大小的次数不能超过 len(L1) + len(L2) 显然桶排序(o(2*(m+n))、冒泡排序(o(n^2))、快速排序(o(nlogn))统统不能用。好在给定的两个数列都已经排序好了,这里用归并排序。
先来个循环,对两个列表分别计数,每一步都取最小值到新列表,比如取到l1[0] 下一个循环就让 l1[1]跟 l2[0] 比较,以此类推。如果有一个列表全部元素都已经被比较完了并全部加入新列表中了,就直接让另一个列表内的剩下的元素加到新列表后面。