题目:给定一个数组strs[],strs中的某些位置是null,但在不为null的位置上,字符串是按照字典顺序由小到大一次出现的。再给定一个字符串str,返回str在strs中最左边的位置。
例:
strs=[null, “a”, null, “a”, null, “b”, null, “c”],
str=”a”,返回1;
str=null,只要str为null,返回-1;
str=”d”,不存在则返回-1。
实现:利用二分法查找
- 定义全局整型变量rst,表示str在strs中最左边的位置。初始化,left=0,right=strs.length-1,rst=-1。
- 令mid=(left+right)/2,若strs[mid]==str,说明找到了str,rst=mid,但不确定是否是最左边的str,因此right=mid-1。重复步骤2。
- 如果strs[mid]!=str,并且str[mid]!=null,比较strs[mid]与str的大小,若str比strs[mid]小,则right=mid-1;否则left=mid+1。然后重复步骤2。
- 如果strs[mid]!=str,并且str[mid]==null,通过while控制向左移动,左边没有元素或找到的字典顺序小于str,则letf = mid+1;字典顺序大或等于str,rst=strs[i].equals(str) ? i : rst,right=i-1.
1 | public class GetIndex { |