C# 二分查找变体
列表已排序。
我有一个列表,我想对其进行二分搜索。 T 具有 StartIndex、EndIndex 等成员。
我可以使用 StartIndex 在列表上进行二分搜索,即:我已经为此实现了 IComparable。
我需要稍微扭转一下,如下所示:我想找到一个可能比 OffBy 小值的 StartIndex。
例如:T.StartIndex= 100
如果输入是 101 并且 OffBy 1 那么 BinarySearch 应该返回这个对象。
我该怎么做?
顺便说一句,我问如何使用 List 具有的默认二进制搜索方法来实现此目的。这就是我感兴趣的,对自定义二进制搜索实现不感兴趣。
The list is sorted.
I have a List and I d like to do binary search on it. T has members like StartIndex, EndIndex etc.
I can do binary search on the list with StartIndex, ie: I have implemented IComparable for this.
I need to twist this a little as the following: I want to find a StartIndex that might be OffBy a small value.
For example : T.StartIndex= 100
if the input is 101 and OffBy 1 then BinarySearch Should return this object.
How can I do this?
BTW, i m asking how to this with default binarysearch method that List has. That s what i m interested, not interested in a custom binary search implementation.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用
List.BinarySearch
,那么它将找到存在的确切位置,或者返回您需要插入该项目的索引的按位补码。因此,如果它返回负数,只需检查下一个和上一个项目(当然要注意末尾),看看其中任何一个是否在您想要的容差范围内。
例如:
If you use
List<T>.BinarySearch
then it will find the exact position of one exists, or return the bitwise complement of the index at which you would need to insert the item.So if it returns a negative number, just check the next and previous items (being careful of the ends of course) to see whether either of those is within your desired tolerance.
For example: