题目:稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。
java:
class Solution {
public int findString(String[] words, String s) {
int left = 0, right = words.length - 1;
while (left < right) {
int middle = left + (right - left) / 2;
if (!words[middle].equals("")) {//注!!java 的String用equals和compareTo比较
if (words[middle].compareTo(s) < 0) {//不能用== > <
left = middle + 1;
}
else if (words[middle].compareTo(s) > 0) {
right = middle - 1;
}
else
return middle;
}
else {//middle为""就从右边一点点收缩
if (words[right].equals(s)) {
return right;
}
else {
right--;
}
}
}
return words[left].equals(s) ? left : -1;
}
}
C++:
class Solution {
public:
int findString(vector<string>& words, string s) {
int left = 0, right = words.size() - 1;
while (left < right) {
int middle = left + (right - left) / 2;
if (words[middle] == "") {//空的不好判断目标值在哪里,所以只能一点点搜索
if (words[left] != s) {
left++;
}
else {
return left;
}
}
else if (words[middle] < s) {
left = middle + 1;
}
else if (words[middle] > s) {
right = middle - 1;
}
else {
return middle;
}
}
return words[left] == s ? left : -1;
}
};