【发布时间】:2014-12-28 07:29:02
【问题描述】:
最近在一次采访中遇到了这个问题。
我必须编写一个函数(带有参数,指向要查找的未知大小和数字的排序数组的开头的指针)来查找给定数字的索引。如果给定元素不存在于数组,我必须返回 -1。
我实际上是在尝试 log(n) 解决方案。
我的想法是在数组的 index-2 处查找元素。如果 index-2 处的元素小于给定的数字,则查看 index-4,如果元素仍然小于索引 8 和很快。
所以基本上这个想法是将 i 的值从 2 增加到 j 其中 arr[j]>给定数字,然后对 arr[j/2] 和 arr[j] 进行二分搜索。
但后来我陷入了如何处理数组中不存在给定元素的情况。
如何在 c++ 中处理这种情况,因为我认为 c++ 不会捕获越界异常?
任何想法都会有帮助...
【问题讨论】:
-
我认为该算法在很大程度上取决于您尝试访问超出范围的元素时会发生什么。你问过面试官吗?如果你这样做了,请将他们的答案编辑到问题中。
-
如果你不知道大小,你就无法避免超出结尾。
-
你必须知道数组的大小,否则你正在看 UDB。
-
@AlanStokes:不一定。一种可能的设置可能是数组总是以
+infinity(或其他事先已知的标记值)终止。因此,线性搜索将知道何时停止,但指数搜索将难以避免越过数组的末尾。这就是要求面试官澄清的关键所在。 -
@starkk92:那么下一个问题应该是如果我们要查找的数字大于数组的每个元素会发生什么。如何避免越过数组末尾的算法?