最近我在接受采访时遇到了这个问题。
我必须编写一个函数(带参数,指向未知大小的排序数组的开头和要查找的数字的指针)来查找给定数字的索引。如果给定的元素不存在于数组,我必须返回-1。
我实际上是在尝试使用log(n)解决方案。
我的想法是在数组的索引-2处查找元素。如果index-2处的元素小于给定数字,请查看index-4,如果元素仍然少于索引8并且很快。
所以基本上我的想法是将i的值从2增加到j,其中arr [j]>给定数字,然后在arr [j / 2]和arr [j]上进行二元搜索。
但后来我陷入了如何处理数组中不存在给定元素的情况。
如何在c ++中处理这种情况,因为我认为c ++不会超出绑定异常?
任何想法都会有所帮助......
答案 0 :(得分:0)
如果在运行时可用并且内存已在堆中分配
,则只使用此函数获取大小http://msdn.microsoft.com/en-us/library/z2s077bc.aspx
并进行简单的二进制搜索
如果你想确保数字在数组中(在这种情况下不需要这个,但是给你一般情况提示)你可以替换数组中的一些如果与sentinel可变(以避免调整大小)。 / p>
答案 1 :(得分:0)
当您不知道阵列的大小时,您无法执行log(n)解决方案。你可以做的是一个简单的线性搜索。这里的关键是数组已排序,这意味着如果您发现的项目大于您要查找的项目,则不在此数组中。
迭代直到A)您找到了您正在寻找的项目或B)您找到的元素大于您正在寻找的项目。如果A)返回当前索引,如果B)返回-1。