问题:面试题 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;
}
}
结果:
转载请注明原文地址: https://lol.8miu.com/read-37837.html