对具有重复项的已排序数组使用二进制搜索
2022-09-01 15:00:21
我的任务是创建一个方法,该方法将打印在排序数组中找到值x的所有索引。
我知道,如果我们只是从0到N(数组的长度)扫描数组,它将具有O(n)最坏情况的运行时间。由于将传递到方法中的数组将被排序,因此我假设我可以利用二进制搜索的优势,因为这将是O(log n)。但是,这仅在数组具有唯一值时才有效。由于二进制搜索将在特定值的第一个“找到”后完成。我正在考虑进行二进制搜索以在排序数组中查找x,然后检查此索引之前和之后的所有值,但是如果数组包含所有x值,则似乎不会更好。
我想我要问的是,有没有更好的方法来查找比O(n)更好的排序数组中特定值的所有索引?
public void PrintIndicesForValue42(int[] sortedArrayOfInts)
{
// search through the sortedArrayOfInts
// print all indices where we find the number 42.
}
例如:sortedArray = { 1, 13, 42, 42, 42, 77, 78 } 将打印:“42 在指数中发现:2, 3, 4”