日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

寻找数组变化:树形结构,分治模型

發(fā)布時間:2024/9/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 寻找数组变化:树形结构,分治模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

尋找數組變化

給定數組arr = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1],返回第一個1的下標

很明顯需要借助于二分查找,二分查找輕微變形就可以實現

第一種思路:二分查找,把數組分成3個部分,left,mid,right,判斷mid是否滿足要求,是的話,直接退出,否的話處理一邊,這個是完全的二分查找的思路

遞歸實現如下:

def binarySearch(arr,left,right):if left < right:mid = left + (right - left ) //2if arr[mid] == 0:# 這個是遞歸的出口之一if arr[mid +1] == 1:return mid + 1else:return binarySearch(arr,mid +1,right)else:# 這個是遞歸的出口之一if arr[mid -1] == 0:return midelse:return binarySearch(arr,left,mid-1)

迭代實現如下:

def binarySearchRecursive(arr):left =0right = len(arr) -1if arr[0] == 1 or arr[-1] == 0 or not arr:return -1# 不會出現left =right,因為在這之前,已經找到了,提前退出了# 循環(huán)體條件,有一種形式靠break退出循環(huán)while left < right:# 取中位數mid = left + (right - left ) //2# 中位數為0,判斷一下,01直接退出,00的話處理右邊if arr[mid] == 0:if arr[mid +1] == 1:index = mid + 1breakelse:left = mid +1 # 中位數為1,判斷一下,01的話退出,11的話處理左邊else:if arr[mid -1] == 0:index = midbreakelse:right = mid-1return index

另外一種思路,我們需要找第一個1,實際上我們是需要尋找的是第一個01,假如一般的切的話,就可能把01給切開了,怎么辦?就是不把01切開,假如我們切到mid的是1,那么我們把mid放在和左邊一起,假如我們切到的mid是0,那么我們把mid和右邊放在一起,那么最后找到的兩個元素就一定是01。這樣處理代碼比較簡單,但是假如我們一刀已經切到了我們需要找到的那個1的位置,我們竟然沒認出來,然后把他又放了進去,再去找,在最后只剩下2個元素才找到。

# 還有一種思路mid = left + (right - left ) //2 # arr[mid] =0是處理[mid-1:right] # arr[mid] =1 時處理[left:mid+1] # 這個的含義就是:剩下處理的數組里總是含有0和1,最后剩余2個時,就是01 def binarySearch2(arr,left,right):if left + 1 == right:index = rightelse:mid = left + (right - left ) //2if arr[mid] == 0:index = binarySearch(arr,mid,right)else:index = binarySearch(arr,left,mid)return index

代碼測試:

arr = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1] left =0 right = len(arr)-1 print(binarySearch(arr,left,right)) print(binarySearchRecursive(arr)) print(binarySearch2(arr,left,right))runfile('D:/share/test/binary_search.py', wdir='D:/share/test') 14 14 14

總結

以上是生活随笔為你收集整理的寻找数组变化:树形结构,分治模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。