题意: 给定一个按照字典顺序排序的字符串数组随意向数组中添加空串""查找字符串数组的非空串字符串返回其下标,不存在则返回-1 思路: 看见有序,可以考虑用二分法但是数组中有空串,mid指向的元素可能会空串,此时让mid++,直到mid指向的不为空串如果mid超过了right边界,说明最开始的mid到right这个范围内全为空串,此时让right收缩到最开始的mid - 1处即可以上为特殊处理,后面使用常规的二分法即可 class Solution { public static int search(String[] s, String target) { int left = 0, right = s.length - 1; while (left < right) { int mid = left + (right - left) / 2; // 记录最开始的mid int temp = mid; while (mid <= right && s[mid].equals("")) { mid++; } // 如果mid超过了数组边界,说明最开始的mid的右边全为空串 if (mid == s.length) { right = temp - 1; continue; } // target > [mid] if (target.compareTo(s[mid]) > 0) { left = mid + 1; } else if (target.compareTo(s[mid]) < 0) { right = mid - 1; } else { return mid; } } return -1; } }