【二分查找】有空字符串的有序字符串数组查找字符串

static int f (String[] a,String p) {
		int begin = 0;
		int end = a.length - 1;
		
		while(begin <= end) {
			int mid = begin + ((end - begin)>>1);
			while(a[mid].equals("")) {
				mid++;
				if(mid > end) {//说明 从中间到最后一个字符都为空字符串
					//所以重新计算end和midIndexof
					//end值就应该比原先的midIndexof值-1
					//midIndexof重新计算
					end = (begin + ((end - begin)>>1)) - 1;
					mid = begin + ((end - begin)>>1);
				}
			}
			//这里必须给 -1 或者 +1 否则可能会形成死循环。
			if(a[mid].compareTo(p) > 0){
				end = mid -1;
			} else if(a[mid].compareTo(p) < 0){
				begin = mid + 1;
			} else {
				return mid;
			}
		}
		
		return -1;
	}
	
	public static void main(String[] args) {
		String[] strings = {"a","","ab","","","b","d"};
		String[] arr = {"a", "", "ac", "", "ad", "b", "", "ba"};
		String[]  a = {"a","","","","b"};
		String[] arr1 = {"a","","","","c"};
		System.out.println(f(arr, "c"));
	}
发布了81 篇原创文章 · 获赞 13 · 访问量 2392

猜你喜欢

转载自blog.csdn.net/alovelypeach/article/details/104153241