![]() |
1
2
作为一个起点,我将删除您的特殊情况
这个
最后,不要递归(在这种情况下,这是非常昂贵的,因为您创建的新列表的数量-每个元素一个!)我会在你的
(理想情况下,我将重构此项以对每个列表使用整数索引,而不是使用
|
![]() |
2
14
合并两个排序列表可以在o(n)中完成。
|
![]() |
3
4
我的看法是:
如果我必须用手做,我会做什么。=) |
![]() |
4
3
你真的确定你的代码是有效的吗?如果不测试它,我可以看到以下内容:
|
![]() |
5
2
你也在要求不同的方法。根据使用情况,我可以做如下操作。下面的代码比较懒惰,因此它不会一次对整个列表进行排序,而是只在请求元素时进行排序。
编辑: 这基本上与Sergey Osypchuk相同,他只看排序时从头到尾的意志是最快的,但是由于提前排序整个列表的事实,延迟也会更高。因此,正如我所说的,根据使用情况,我可能会采用这种方法,另一种方法是类似于Sergey Osypchuk的方法。 |
![]() |
6
2
通常可以使用堆栈而不是递归 |
![]() |
7
1
合并列表(理论上,输入列表是预先排序的)排序可以通过以下方式实现:
如果您从未排序的列表开始,则需要使用上面的函数按排序的子序列对其进行拆分,然后将其变为褐色。 |
![]() |
8
0
我从不使用递归进行合并排序。您可以对输入进行迭代传递,利用这样一个事实:排序后的块大小在每次合并传递中都会翻倍。跟踪每个输入列表中的块大小和已处理项目的计数;当它们相等时,列表将耗尽。当两个列表都用尽时,您可以继续下一对块。当块大小大于或等于输入大小时,就完成了。 编辑: 由于我的误解,我之前留下的一些信息是不正确的-C中的列表类似于数组,而不是链接列表。我很抱歉。 |
![]() |
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 3 年前 |
![]() |
Justin · Python自属性重命名 7 年前 |
![]() |
Sabutobi · 长dict属性行的重构 7 年前 |
![]() |
Falco Alexander · 简单LINQ重构/样式 7 年前 |
|
05bs001 · Euler 12需要优化 7 年前 |
![]() |
slartidan · 如何将lambda表达式重构为方法引用? 7 年前 |
|
Alex · 在Java类中频繁使用与映射键相同的字符串[已关闭] 7 年前 |