折半查找
1.二分查找(折半查找)
def binary_search(li,val): left = 0 right = len(li)-1 # 表示索引 while left <= right: mid = int((left + right)/2) if val == li[mid]: return mid # 返回索引 elif val < li[mid]: right = mid-1 elif val > li[mid]: left = mid + 1 else: return None li = [1,2,3,4,5,6,7,8,9] print(binary_search(li, 9))
输出结果:8
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
def threeSum4(pl): # 方法#4,取三个数的时候采用二分法,计算量 (n-2)*(n-2)*log2(n-2) myList =[] if len(pl) > 2: pl.sort() for i in range(len(pl)-2): for j in range(i+1, len(pl)-1): left = j+1 right = len(pl)-1 while left <= right: mid = (left + right)//2 if pl[i] + pl[j] + pl[mid] > 0: right = mid - 1 elif pl[i] + pl[j] + pl[mid] < 0: left = mid + 1 else: if [pl[i], pl[j], pl[mid]] not in myList: myList.append([pl[i], pl[j], pl[mid]]) break return myList if __name__ == '__main__': myNum = threeSum4([1, 2, 3, -1, 0]) print(myNum)