class Solution {
public int findString(String[] words, String s) {
int low = 0, high = words.length - 1;
int mid, temp;
while (low <= high) {
mid = (low + high) >> 1;
temp = mid;
//找到mid下标:数组中不为空字符串的数组下标
//如果mid下标对应的数组值为空字符串的话,mid++直到不为空字符串
while (mid <= high && "".equals(words[mid])) {
mid++;
}
//如果是mid自增到大于high的情况
//且数组值一直不为空字符串的情况下跳出循环的话
if (mid == high + 1) {
high = temp - 1;
continue;
}
//另一种跳出上一层while的情况:words[mid]不为空字符串
//按照正常的二分查找算法来
if (s.equals(words[mid])) {
return mid;
}
//words[mid]在s的右边
if (s.compareTo(words[mid]) < 0) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
}
面试题 10.05、稀疏数组搜索(简单)
最新推荐文章于 2021-10-09 17:56:06 发布