二分法

1.查找缺失的数字

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

示例 1:

输入: [0,1,3]
输出: 2

示例 2:

输入: [0,1,2,3,4,5,6,7,9]
输出: 8

思路:如果nums[m]!=m,则说明0-m区间缺失元素,否则查找[m-n]区间的数字

def find_missing(list):
    left=0
    right=len(list)-1
    while left <= right:
        mid=(left+right)//2
        if list[mid]==mid:
            left=mid+1
        else:
            right=mid-1
    return left
list=[0,1,2,3,4,5,6,7,9]
result=find_missing(list)
print(result)

 2. 稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。

示例1:

输入: words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ta"
输出:-1
说明: 不存在返回-1。

示例2:

输入:words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ball"
输出:4

def find_index(list,target,dict):
    left=0
    right=len(list)-1
    while left<=right:
        mid=(left+right)//2
        if list[mid]<target:
            left+=mid
        elif list[mid]>target:
            right-=mid
        else:
            word=list[mid]
            index=mydict[word]
            return index
    return -1

list_obj=["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""]
list=[]
n=len(list_obj)#13
mydict={}
for i in range(n):
    value=list_obj[i]
    if len(value)>0:
        mydict[value]=i
        list.append(value)

print(mydict)
print(list)
target="ta"
result=find_index(list,target,mydict)
print(result)

 

posted on 2020-10-10 15:04  happygril3  阅读(108)  评论(0)    收藏  举报

导航