美文网首页
python查找算法问题总结

python查找算法问题总结

作者: 托贝多尔 | 来源:发表于2022-02-22 16:58 被阅读0次

    1、单个元素查找(有序)

    查找第一个值等于给定值的元素下标

    def binary_search(sorted_list:list,aim:int):
        low=0
        high=len(sorted_list)-1
        while low<=high:
            mid=low+(high-low)//2 
            # mid=(low+high)//2
            if sorted_list[mid]>aim:
                high=mid-1
            elif sorted_list[mid]<aim:
                low=mid+1
            else:
                if mid==0 or sorted_list[mid-1]!=aim:
                    return mid #变形可以查找最后一个小于给定值的元素下标mid-1
                high=mid-1
        return -1
    

    查找最后一个值等于给定值的元素下标

    def binary_search(sorted_list:list,aim:int):
        low=0
        hight=len(sorted_list)-1
        while low<=high:
            mid=low+(high-low)//2
            #mid =(high+low)//2
            if sorted_list[mid]>aim:
                high=mid-1
            elif sorted_list[mid]<aim:
                low=mid+1
            else:
                if mid==len(sorted_list)-1 or sorted_list[mid+1]!=aim:
                    return mid # 变形可以查找第一个大于给定值的的元素下标mid+1
                else:
                    low=mid+1
            return -1
    

    查找第一个大于等于给定值的元素下标

    def binary_search(sorted_list:list,aim:int):
        low=0
        high=len(sorted_list)-1
        while low<=high:
            mid=low+(high-low)//2
            # mid=(low+high)//2
            if sorted_list[mid]<aim:
                low=mid+1
            else:
                if mid==0 or sorted_list[mid-1]<aim: 
                    return mid
                else:# 中间位置的值不是第一个大于等于给定值的值,向下找
                    high=mid-1
        return -1   
    

    查找最后一个小于等于给定值的元素下标

    def binary_search(sorted_list:list,aim:int):
        low=0
        high=len(sorted_list)-1
        while low<=high:
            mid=low+(high-low)//2
            #mid=(high+low)//2
            if sorted_list[mid]>aim:
                high=mid-1
            else:
                if mid==len(sorted_list)-1 or sorted_list[mid+1]>aim:
                    return mid
                else:# 中间位置的值不是最后一个小于等于给定值的值,向上找
                    low= mid+1
        return -1
    

    2、集合元素查找(有序)

    查找所有值等于给定值的元素

    sorted_list[查找第一个值等于给定值的元素下标:查找最后一个值等于给定值的元素下标+1]
    

    查找所有值大于给定值的元素

    sorted_list[查找最后一个值等于给定值的元素下标+1:]
    

    查找所有值小于给定值的元素

    sorted_list[:查找第一个值等于给定值的元素下标+1]
    

    查找所有值大于等于给定值的元素

    sorted_list[查找第一个大于等于给定值的元素下标:]
    或
    sorted_list[查找第一个值等于给定值的元素下标:]
    

    查找所有小于等于给定值的元素

    sorted_list[:查找最后一个小于等于给定值的元素下标+1]
    或
    sorted_list[:查找最后一个值等于给定值的元素下标+1]
    

    相关文章

      网友评论

          本文标题:python查找算法问题总结

          本文链接:https://www.haomeiwen.com/subject/lvyglrtx.html