旋轉陣列的最小數字

2021-06-28 07:39:02 字數 1050 閱讀 4945

1. 問題描述

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出該旋轉陣列的最小元素。例如陣列{3,4,5,1,2}

為{1,2,3,4,5}的乙個旋轉,該陣列的最小值為1.(來自《劍指offer》)

2.分析

首先我們可以看到原陣列為遞增排序的,並且以最小元素為界左邊的為遞增有序,右邊的也為遞增有序因此我們可以使用二分查詢。我們定義3個指標left,right,mid,因為為旋轉陣列除了他本身(1,2,3,4,5),left指向的值肯定大於等於right 指向的值(反之那證明就是陣列本身執行返回即可),遍歷時 如果 mid指向的值大於left指向的值,那麼在繼續在left的右邊搜尋。如果mid指向的值小於right指向的值,那麼在mid的左邊搜尋。 另外一種情況0,1,1,1,1 的乙個旋轉為 1,1,1,0,1 這種 mid,left,right指向的值都為 1 ,我們只能順序查詢最小值。

3.**

#include int isnotfind = 0;

int findmin(int* array, int length)

int left = 0;

int right = length - 1;

int middle = left;

while (array[left] >= array[right])

middle = (right + left) / 2;

if (array[left] == array[middle] && array[right] == array[middle])

if (array[left] <= array[middle])

if (array[right] >= array[middle])

}return array[middle];

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

}return result;

}

旋轉陣列最小數字

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

旋轉陣列最小數字

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

旋轉陣列的最小數字

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 代表旋轉陣列的元素個數。...