陣列1 旋轉陣列 找最小值 找指定值

2021-07-22 06:49:14 字數 1719 閱讀 4580

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 二 使用暴力的方式就是遍歷這個陣...