zoukankan      html  css  js  c++  java
  • 二分查找及几种变体的Python实现

    1. 在不重复的有序数组中,查找等于给定值的元素

    循环法

    def search(lst, target):
    	n = len(lst)
    	if n == 0:
    		return -1
    	
    	low = 0
    	high = n - 1
    	while low <= high:
    		mid = (high-low)//2 + low
    		if lst[mid] == target:
    			return mid
    		elif lst[mid] < target:
    			low = mid +1
    		elif lst[mid] > target:
    			high = mid -1
    	return -1
    

    递归法

    def search2(lst, target, low, high):
    	if low > high:
    		return -1
    	
    	mid = (high-low)//2 + low
    	if lst[mid] == target:
    		return mid
    	elif lst[mid] < target:
    		return search2(lst, target, mid+1, high)
    	elif lst[mid] > target:
    		return search2(lst, target, low, mid-1)
    

    2. 查找第一个值等于给定值的元素

    def bsearch(lst, value):
    	n = len(lst)
    	if n == 0:
    		return -1
    	low = 0
    	high = n - 1
    	while low <= high:
    		mid = (high-low) // 2 + low
    		if lst[mid] < value:
    			low = mid + 1
    		elif lst[mid] > value:
    			low = mid - 1
    		elif lst[mid] == value:
    			if mid == 0 or lst[mid-1] != value:
    				return mid
    			else:
    				high = mid - 1
    	return -1
    

    3. 查找最后一个值等于给定值的元素

    def bsearch(lst, value):
    	n = len(lst)
    	if n == 0:
    		return -1
    	low = 0
    	high = n - 1
    	while low <= high:
    		mid = (high-low) // 2 + low
    		if lst[mid] > value:
    			high = mid - 1
    		elif lst[mid] < value:
    			low = mid + 1
    		elif lst[mid] == value:
    			if mid == n-1 or lst[mid+1] != value:
    				return mid
    			else:
    				low = mid + 1
    	return -1
    

    4. 查找第一个大于等于给定值的元素

    def bsearch(lst, value):
    	n = len(lst)
    	if n == 0:
    		return -1
    	low = 0
    	high = n - 1
    	while low <= high:
    		mid = (high-low) // 2 + low
    		if lst[mid] < value:
    			low = mid + 1
    		elif lst[mid] >=value:
    			if mid == 0 or lst[mid-1] < value:
    				return mid
    			high = mid - 1
    

    5. 查找最后一个小于等于给定值的元素

    def bsearch(lst, value):
    	n = len(lst)
    	if n == 0:
    		return -1
    	low = 0
    	high = n - 1
    	while low <= high:
    		mid = (high-low) // 2 + low
    		if lst[mid] > value:
    			high = mid - 1
    		elif lst[mid] <= value:
    			if mid == n-1 or lst[mid+1] > 0:
    				return mid
    			low = mid + 1
    	return -1
    
  • 相关阅读:
    HanLP vs LTP 分词功能测试
    HanLP中文分词Lucene插件
    pyhanlp:hanlp的python接口
    Hanlp自然语言处理工具之词法分析器
    基于结构化感知机的词性标注与命名实体识别框架
    分词工具Hanlp基于感知机的中文分词框架
    Android环境下hanlp汉字转拼音功能的使用介绍
    Javascript JSON语法基础
    mui ajax方法详解
    HBuilder的webview操作
  • 原文地址:https://www.cnblogs.com/leisurelylicht/p/er-fen-cha-zhao-ji-ji-zhong-bian-ti-dePython-shi-x.html
Copyright © 2011-2022 走看看