劍指Offer面試題11 旋轉陣列的最小數字

2021-08-20 23:57:46 字數 1519 閱讀 8714

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。

牛客網ac**:

class solution 

int left = 0,right = rotatearray.size()-1;

if(rotatearray[left] < rotatearray[right])

return rotatearray[left];

while(1)}};

程式設計**如下:

#includeusing namespace std;

//找出旋轉陣列最小值

int min(int arr,int l,int r);

//找出旋轉陣列最小值

int mininorder(int* numbers, int index1, int index2);

int min_2(int* numbers, int index1,int index2);

int main();

cout

catch(const char *s)

while(j-i != 1)

return arr[j];

}int mininorder(int* numbers, int index1, int index2)

return result;

}int min_2(int* numbers, int index1,int index2)

catch(const char *s)

// 如果下標為index1、index2和indexmid指向的三個數字相等,

// 則只能順序查詢

indexmid = (index1 + index2) / 2;

if(numbers[index1] == numbers[index2] && numbers[indexmid] == numbers[index1])

return mininorder(numbers, index1, index2);

// 縮小查詢範圍

if(numbers[indexmid] >= numbers[index1])

index1 = indexmid;

else if(numbers[indexmid] <= numbers[index2])

index2 = indexmid;

}return numbers[indexmid];

}

執行結果如下:

劍指offer 面試題11 旋轉陣列的最小數字

完整 位址 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。這道題目相對前面的比較複雜,坑比較多 此時用二分法解決,mi...

《劍指offer》面試題11 旋轉陣列的最小數字

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列為的乙個旋轉,該陣列的最小值為1。分析 我們注意到旋轉之後的陣列實際上可以劃分為兩個排序的子陣列,而且前面子陣列的元素都大於或者等於後面子陣列的元素。和二分查詢...

劍指offer 面試題11 旋轉陣列中的最小數字

時間複雜度o logn 解題思路 1.旋轉陣列是兩段遞增的序列,如果 中間元素 左端元素 右端元素 從前到後遍歷元素 如果中間元素 左端元素 最小值在第二段,更新左端指標,如果中間元素 左端元素 中間元素 右端元素 最小值在第一段,更新右邊的指標。public static void main st...