劍指offer(6) 旋轉陣列的最小數字

2021-07-13 04:08:39 字數 1076 閱讀 7112

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。

輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

例如陣列為的乙個旋轉,該陣列的最小值為1。

note:給出的所有元素都大於0,若陣列大小為0,請返回0。

這道題最直觀的解法並不難,從頭到尾遍歷陣列一次,我們就能找出最小的元素。這種思路的時間複雜度顯然是o(n)。但是這個思路沒有利用輸入的旋轉陣列的特性,肯定達不到面試官的要求。

我們注意到旋轉之後的陣列實際上可以劃分為兩個排序的子陣列,而且前面的子陣列的元素都大於或者等於後面子陣列的元素。我們還注意到最小的元素剛好是這兩個子陣列的分界線。在排序的陣列中我們可以用二分查詢法實現o(logn)的查詢。本題給出的陣列在一定程度上是排序的,因此我們可以試著用二分查詢法的思路老尋找這個最小的元素。

class solution 

long startindex = 0;

long endindex = rotatearray.size() - 1;

long indexmid = startindex ;

while (rotatearray[startindex] >= rotatearray[endindex])

indexmid = (startindex + endindex)/2;

if (rotatearray[startindex] == rotatearray[endindex] && rotatearray[startindex] == rotatearray[indexmid])

if (rotatearray[indexmid] >= rotatearray[startindex]) else

if (rotatearray[indexmid] <= rotatearray[startindex])

}return rotatearray[indexmid];

}private:

int mininorder(vector

rotatearray)

}return result;

}};

劍指Offer 6 旋轉陣列的最小元素

description把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。可以直接binary search,每次mid和r的...

劍指Offer (6)旋轉陣列的最小數字

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。實現如下 l m r 規律 一般前旋轉區的數大於等於後旋轉區的...

劍指offer 6 旋轉陣列的最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。解法1 從頭到尾遍歷一次,當第一次遇到前面的值大於後面的值時,後面的值即...