二分法
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) 收藏 举报
浙公网安备 33010602011771号