当每个字符串的值可以为strs
或n
时,将为您提供一个名为"good"
的字符串数组,其长度为"bad"
。还已知存在索引i
,因此:
0<=i<=n-1
,strs[0]=strs[1]=...=strs[i-1]="good"
,strs[i]=strs[i+1]=...=strs[n-1]="bad"
。
请注意,如果为i=0
,则表示strs
仅包含值为"bad"
的字符串。
编写一种算法来查找索引i
。
所需的运行时间:O(logn)
我的尝试:
我确定您需要在此处使用二进制搜索,但是由于某种原因,我对中间元素的检查有疑问。
我考虑过检查中间元素的值是否为"good"
,中间元素+1的值是否为"bad"
,但这可以避免跳出错误。
有什么办法解决吗?
答案 0 :(得分:1)
在这里的答案中,我解释说,当您编写二进制搜索时,通常最好执行真正的二进制搜索(做出真正的二进制决策)以找到要搜索的元素所属的索引,然后检查它是否确实存在:
How can I simplify this working Binary Search code in C?
对于您而言,索引就是您想要的结果,因此您甚至不需要检查:
int findIndex(string[] array)
{
int minpos=0; //smallest possible answer (array is all bad)
int limit=array.length; //largest possible answer (array is all good)
while(minpos<limit)
{
//testpos is guaranteed to be >= minpos and < limit
int testpos = minpos+((limit-minpos)/2);
if (array[testpos].equals("good")) //test index is too low
minpos=testpos+1; //minpos always increases here
else
limit=testpos; //limit always decreases here
}
return minpos;
}