1.乙個有序陣列1,2,3,4,5,6,7,8,9,但是被截斷處理了,變成了5,6,7,8,9,1,2,3,查詢陣列的最小值(旋轉陣列求最小值)
最小元素位於end-start==1的位置
迴圈條件是array[start]>array[end]
特殊情況:
(1)旋轉0個元素,第乙個元素是最小值,因此mid初始值為start
(2)1 0 1 1 1,只能採用按順序查詢的方法
def searchmin(array):
if len(array)==0:
return -1
i=0
j=len(array)-1
mid=i
while(array[i]>=array[j]):
if(j-i==1):
mid=j
break
mid=(i+j)/2
if(array[i]==array[mid]&array[mid]==array[j]):
return minorder(array,i,j)
if array[mid]>=array[i]:
i=mid
elif array[mid]<=array[j]:
j=mid
return mid
def minorder(array,i,j):
result=array[i]
for k in range(i+1,j):
if result>array[k]:
result=array[k]
return result
2.乙個有序陣列1,2,3,4,5,6,7,8,9,但是被截斷處理了,變成了5,6,7,8,9,1,2,3,請問要查詢其中乙個數如何查詢
int find(int arr, int key) arr是陣列,n是陣列大小,key是查詢的值
這道題是題目1的變種
思路:(1)找到旋轉陣列裡的最小值位置(題目1)
(2)通過最小值將整個陣列劃分為兩個有序陣列
(3)通過二分查詢找到指定數字,如果key>array[0]則key位於前面的陣列中,否則在後一陣列中查詢key。
def searchminnum(array,key):
if len(array)==0:
return -1
start=0
end=len(array)-1
minnumat=searchmin(array) //呼叫題1函式
if key>=array[start]:
return binarysearch(array,start,minnumat-1,key)
else:
return binarysearch(array,minnumat,end,key)
def binarysearch(array,start,end,key): //二分查詢
if len(array)==0:
return -1
while(start<=end):
mid=(start+end)/2
if(array[mid]==key):
return mid
elif(array[mid]>key):
end=mid-1
elif(array[mid]
旋轉陣列中找最小值
概念 旋轉陣列就是,將乙個排序陣列的前n位數挪到陣列的後面,我們稱之為旋轉陣列。例如陣列就是陣列的乙個旋轉。分析 找出乙個陣列中最小的數並不難,只需遍歷陣列即可,但是次方法的時間複雜度為o n 而且沒有利用旋轉陣列的特性。解決 我們注意到旋轉後的陣列實際上可劃分為兩個排序的陣列,而且前面的子陣列的值...
劍指offer 旋轉陣列找最小值
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。思路 根據旋轉陣列的定義可知旋轉陣列可分為兩個有序序列,可用二分法查詢。...
旋轉陣列求最小值
這是letcode上的一道題目 leetcode find minimum in rotated sorted array 一 什麼是旋轉陣列呢,就是乙個有序的陣列,在從某乙個位置開始,旋轉到陣列的另一端,例如 0 1 2 3 4 5 6 4 5 6 0 1 2 3 二 使用暴力的方式就是遍歷這個陣...