在字符串数组中查找索引,其中字符串从“好”变为“坏”-面试问题

时间:2018-12-08 22:19:40

标签: arrays algorithm performance binary-search

当每个字符串的值可以为strsn时,将为您提供一个名为"good"的字符串数组,其长度为"bad"。还已知存在索引i,因此:
0<=i<=n-1strs[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",但这可以避免跳出错误。

有什么办法解决吗?

1 个答案:

答案 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;
}