我有一组范围:
Range1 ---- (0-10)
Range2 ---- (15-25)
Range3 ----(100-1000)等。我希望只存储边界,因为存储大范围,这将是有效的。
现在我需要搜索一个数字,比如14。在这种情况下,14不存在于任何范围中,而(例如一个数字)16存在于其中一个范围中。
我需要一个函数bool搜索(range, searchvalue){如果搜索值存在于任何范围中返回true;其他的返回错误;}怎样才能做到最好呢?这是严格不重叠的,重要的标准是搜索必须是最有效的。
有一个类似的问题,我问考虑到c++,我们可以使用map或vector,但如何在c#上最好地完成它?
你可以定义一个类范围并对其进行二分搜索:最好在启动时保持列表排序,或者使用sortedlist
public class Range : IComparable
{
public int start;
public int end;
public int CompareTo(object obj)
{
var result = obj as Range;
if (result == null)
return 1;
if (start > result.start)
return 1;
if (result.start >= start && result.end <= end)
return 0;
return -1;
}
}
public void findItemInRange(List<Range> ranges, int item)
{
// ranges.Sort(); I'll assume list is sorted
int positionOfItem = ranges.
BinarySearch(new Range { start = item, end = item });
}