折半查找

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)

 

 
posted @ 2021-11-17 12:34  我是一只小小小小鸟~  阅读(23)  评论(0编辑  收藏  举报