1
31
试试这个小方法:
一些测试案例:
|
2
1
我认为你所拥有的是最简单和最有效的方法。在排序列表中查找“最近”的项不是编程中常见的问题(您通常查找较大的项或较小的项)。这个问题只对数字类型有意义,所以不是很可归纳的,因此为它提供一个库函数是不常见的。 |
3
1
为了解决这个问题,我将用一个DistanceTo方法扩展可比较的接口。DistanceTo的实现返回一个表示预期距离的双精度值,该值与CompareTo实现的结果兼容。 下面的例子仅用苹果来说明这个想法。你可以用重量、体积或甜度来交换直径。这个袋子总是会返回“最近”的苹果(大小、重量或味道最相似)
|
4
1
不使用二进制搜索的解决方案(利用正在排序的列表):
|
5
0
当然,您可以简单地使用for循环来遍历并跟踪您所使用的值和值之间的差异。它看起来更干净,但速度慢得多。 |
6
0
未测试
|
7
0
我认为您的答案可能是返回单个结果的最有效方法。 但是,您的方法的问题是有0(如果没有列表)、1或2个可能的解决方案。当你对一个函数有两个可能的解决方案时,你的问题就真正开始了:如果这不是最终的答案,而是一系列步骤中的第一个来确定一个最佳的操作过程,而你没有返回的答案会提供一个更好的解决方案呢?唯一正确的做法是考虑两个答案,并且只在最后比较进一步处理的结果。 把平方根函数看作是一个类似的问题。 |
8
0
如果您不太关心性能(考虑到该集被搜索两次),我认为使用可导航集可以得到更清晰的代码:
|
9
0
你的解似乎是渐近最优的。如果使用math.min/max,它可能会稍微快一点(尽管可能不太容易维护),一个好的JIT很可能具有使这些速度更快的内部特性。
|