问题:面试题 10.05. 稀疏数组搜索
分析:
分析:看到有序,必先二分。但是注意:如果我们二分的mid指向一个空的字符串那么我们需要向两边寻找到一个非空的字符串,把它作为mid,如果俩边都没有,那么直接返回-1.
code
class Solution {
public int findString(String[] words, String s) {
int left = 0, right = words.length - 1;
while (left <= right) {
int mid = (left + right) >>> 1;
if (words[mid].equals("")) {
while (++mid < right && words[mid].equals(""));
if (mid >= right) {
mid = (left + right) >>> 1;
while (--mid > left && words[mid].equals(""));
if (mid <= left) return -1;
}
}
if (words[mid].compareTo(s) == 0) return mid;
if (words[mid].compareTo(s) > 0) right = mid - 1;
else left = mid + 1;
}
return -1;
}
}
结果: