稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。
示例1:
输入: words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ta" 输出:-1 说明: 不存在返回-1。
示例2:
输入:words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ball" 输出:4
代码如下:
//二分查找法:与一般的不同的是,left和right可能取空值,需要人为的判断并缩小边界
//计算出的mid可能也是空值,将mid向右偏,直到与右边界重合,说明在mid与right之间没有我们想要的值,此时将right更新为mid
class Solution {
public:
int findString(vector<string>& words, string s) {
int left=0,right=words.size()-1;
while(left<=right)
{
if(words[left].size()==0)//左边界为空
{
left++;
continue;
}
if(words[right].size()==0)//右边界为空
{
right--;
continue;
}
int mid=(right+left)/2;
while(words[mid].size()==0)//中间的值为空
{
mid++;//将mid向右移,直到不为空
if(mid==right)
{
right=(left+right)/2;
continue;
}
}
//正常的二分查找法
if(words[mid]==s)
{
return mid;
}
else if(words[mid]>s)
{
right=mid-1;
}
else{
left=mid+1;
}
}
return -1;
}
};