【发布时间】:2013-06-07 17:06:23
【问题描述】:
假设我有一组恰好被排序的固定数字:
static readonly int[] numbers = new int {
1, 200, 204, 228, 298, 300, 331, 332, ... 2983
};
如何有效地找到小于或等于任意值的最大数。我正在尝试创建的功能如下:
public int LessThanOrEqualTo(int n)
{
// ???
}
最简单的方法是每次迭代集合。但是,我正在寻找一种方法来加快速度。我可以将其转换为另一种格式,例如 IDictionary,但想不出一个聪明的方法来临时做这个。
【问题讨论】:
-
二分查找?
-
注意“如果找到 item;否则,一个负数,它是下一个大于 item 的元素的索引的按位补码”,因此如果没有找到,你会得到下一个更大的,并且因此,您可以向后移动一个索引以获取您想要的元素。 msdn.microsoft.com/en-us/library/5kwds4b1.aspx
-
@AaronLS 请注意,在这种情况下,它将是
Array.BinarySearch而不是列表版本。 -
这并不完全是二分搜索,尽管合并二分搜索可能是个好主意。
-
@MattGreer 实际上,这是完全二分搜索。