題目描述
有一個排過序的字符串數組,但是其中有插入了一些空字符串,請設計一個算法,找出給定字符串的位置。算法的查找部分的複雜度應該爲log級別。
給定一個string數組str,同時給定數組大小n和需要查找的string x,請返回該串的位置(位置從零開始)。
測試樣例:
["a","b","","c","","d"],6,"c"
返回:3
變形的二分查找,重新設定了mid的生成方法。
mid爲從high開始往low位走,第一個不爲空的字符串
class Finder {
public:
int findString(vector<string> str, int n, string x) {
// write code here1
int low = 0;
int high = str.size() - 1;
while(low < high)
{
int mid;
for(mid = high; mid >= low; --mid)
if(str[mid] != "")
break;
if(str[mid] < x)
{
low = mid + 1;
}
else if(str[mid] > x)
{
high = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
};