m:high=mid-1else:printmidreturnmidprint-1return-1if__name__=="__main__":a=[int(i)for" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python二分查找詳解

系統 1816 0

先來看個實例

            
#!/usr/bin/env python 
import sys  
 
def search2(a,m): 
  low = 0  
  high = len(a) - 1  
  while(low <= high): 
    mid = (low + high)/2 
    midval = a[mid] 
   
    if midval < m: 
      low = mid + 1  
    elif midval > m: 
      high = mid - 1  
    else: 
      print mid  
      return mid  
  print -1 
  return -1 
 
if __name__ == "__main__": 
  a = [int(i) for i in list(sys.argv[1])] 
  m = int(sys.argv[2]) 
  search2(a,m) 

          

運行:

            
administrator@ubuntu:~/Python$ python test_search2.py 123456789 4

          

3

注:

1.'__':由于python的類成員都是公有、公開的被存取public,缺少像正統面向對象語言的私有private屬性。
于是就用__來將就一下,模擬私有屬性。這些__屬性往往是內部使用,通常情況下不用改寫。也不用讀取。
加上2個下劃線的目的,一是不和普通公有屬性重名沖突,二是不讓對象的使用者(非開發者)隨意使用。
2.__name__ == "__main__"表示程序腳本是直接被執行的.
如果不等于表示腳本是被其他程序用import引入的.則其__name__屬性被設為模塊名

Python采用二分查找找出數字的下標

要考慮有重復數字的情況

            
class Solution(object):
  def searchRange(self, nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: List[int]
    """
    def binary_search(start,end,value):
      while end>=start:
        mid = (start+end)//2
        print(mid)
        if nums[mid]>target:
          end = mid-1
        elif nums[mid]
            
              =start and nums[mid+value] == target:
              end = mid+value
            else:
              return mid
          else:
            if mid+1<=end and nums[mid+value] == target:
              start = mid+value
            else:
              return mid
 
      return -1
    a=binary_search(0,len(nums)-1,-1)
    b=binary_search(0,len(nums)-1,1)
    return [a,b]
a = Solution()
l = [2,2]
print(a.searchRange(l,2))


            
          

二分算法的定義不在多說了,百度一下就知道(支持國產大笑)

            
import sys 
source = [1,2,3,4,5,6,7,8,9,10] #must be in order 
des = int(sys.argv[1]) 
low = 0 
high = len(source) - 1 
targetIndex = -1 
print "des=",des 
while low <= high: 
  middle = (low + high)/2 
  if des == source[middle]: 
    targetIndex = middle 
    break 
  elif des < source[middle]: 
    high = middle -1 
    print "middle element[index=",middle,",value=",source[middle],"] is bigger than des, continue search from[",low,"to",high,"]" 
  else: 
    low = middle + 1 
    print "middle element[index=",middle,",value=",source[middle],"] is smaller than des, continue search from[",low,"to",high,"]" 
print "search complete, target element's index in source list is ",targetIndex 
          

最后在分享一個

            
'fileName--BinarySearch.py' 
 
src = [] 
 
def BinarySearch(low, high, target, *src): 
  '二分查找' 
  while low <= high: 
    mid = (low + high) // 2 
    midVal = src[mid] 
    if target < midVal: 
      high = mid - 1 
    elif target > midVal: 
      low = mid + 1 
    else: 
      return mid 
    BinarySearch(low, high, target, *src) 
 
print('Please input 10 number:') 
for number in range(10): 
  src.append(int(input('Num %d:' % number))) 
 
sortList = tuple(src) 
 
key = int(input('Please input key:')) 
location = BinarySearch(0, len(src) - 1, key, *sortList) 
 
if location != None: 
  print('Find target at %d' % (location + 1)) 
else: 
  print('No target!') 
          


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 阿荣旗| 治多县| 巍山| 巨鹿县| 通山县| 鲜城| 铜山县| 景德镇市| 长白| 兴义市| 循化| 乌兰县| 南乐县| 海口市| 兰考县| 滕州市| 肥乡县| 斗六市| 鹤庆县| 邵阳县| 神木县| 辽阳市| 布拖县| 安新县| 娄底市| 若尔盖县| 措美县| 林口县| 吴川市| 县级市| 平潭县| 灵丘县| 玉山县| 沁阳市| 正阳县| 樟树市| 汉川市| 宿州市| 东台市| 九龙城区| 深泽县|