给定一个string数组str,其是由一个排过序的字符串数组插入了一些空字符串得到的,同时给定数组大小n和需要查找的string x,请用时间复杂度在log级别的算法返回该串的位置(位置从零开始)。
测试样例:
["a","b","","c","","d"],6,"c"
返回:3
log复杂度,锁定 快排,堆排,归并,二分, 这里考虑快速排序: # -*- coding:utf-8 -*- class Finder: def findString(self, s, n, x): # write code here left = [] right = [] for i in range(n): if s[i] > x: right.append(s[i]) elif s[i] < x: left.append(s[i]) else: return s.index(x) if findString(left, len(left), x): return findString(left, len(left), x) return findString(right, len(right), x)
# -*- coding:utf-8 -*- class Finder: def findString(self, s, n, x): if n < 1: return -1 i = 0 j = n - 1 while i <= j: mid = (i + j)/2 # 移动mid位置 if s[mid] == '': left = mid - 1 right = mid + 1 while True: if left < i and right > j: return -1 elif left >= i and s[left] != '': mid = left break elif right <= j and s[right] != '': mid = right break right += 1 left -= 1 if s[mid] == x: return mid elif s[mid] < x: i = mid + 1 else: j = mid - 1 return -1