旋轉陣列中的最小數字

2021-07-06 04:45:02 字數 838 閱讀 3354

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減序列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。

查詢乙個陣列中最小值,直接遍歷當然是最簡單的方式,但是時間複雜度為o(n);首先分析旋轉陣列的特點,假設旋轉陣列的前半部分為h,後半部分為t,則t中元素一定小於等於h中元素,而最小值一定位於h和t的交界處。設head為h中第乙個元素的指標,tail為t中最後乙個元素的指標,並且head和tail始終分別在h和t中,當tail-head==1時,表示tail剛好指向最小值,這個就是結束條件。

我們可以使用折半查詢的思想,設定乙個中間變數mid = (head+tail)/2。當mid位於h中時,將head設定為mid;當mid位於t中時,將tail設定為mid,這樣可以減少比較的次數,提高查詢效率。

int minnumberinrotatearray(vectorrotatearray)

return tmp;

}//mid位於前半部分

else if(rotatearray[tail] < rotatearray[mid])            

head = mid;    

//mid位於後半部分

else if(rotatearray[tail] > rotatearray[mid])            

tail = mid;    

//mid位於後半部分

else if(rotatearray[head] > rotatearray[mid])

tail = mid;

//mid位於前半部分

else 

head = tail;}}

旋轉陣列最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列 為的乙個旋轉,該陣列的最小值為1。code int min int numbers,int length int low 0 int high length 1 in...

旋轉陣列最小數字

旋轉陣列最小數字 劍指offer 二分查詢 題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。解題思路 題目要求找到最小元素,第一反應是排序,但陣列基本有序直接排序浪費效能。結合資料的特點前半部分遞增,後半部分遞減,...

旋轉陣列中的最小數字

思路 遞增序列。旋轉陣列中,由於是把遞增排序陣列前面若干個數字搬到陣列後面,一次第乙個數字總是大於等於最後乙個數字。1 乙個特例,如果把排序樹組的前面0個元素搬到最後面,即排序陣列本身,此時陣列中的最後乙個陣列就是最小的數字,所以在以下 中,把mid初始化為start,一旦發現陣列中第乙個數字小於最...