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

2021-06-22 11:16:40 字數 1032 閱讀 7360

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

輸入:輸入可能包含多個測試樣例,對於每個測試案例,

輸入的第一行為乙個整數n(1<= n<=1000000):代表旋轉陣列的元素個數。

輸入的第二行包括n個整數,其中每個整數a的範圍是(1<=a<=10000000)。

輸出:對應每個測試案例,

輸出旋轉陣列中最小的元素。

樣例輸入:

53 4 5 1 2

樣例輸出:

1

題目解析:

題目不難,可以用我的方法去一點一點遍歷,找到第乙個i比i-1小的資料即可。但是要考慮健壯性:整個數列都是遞增,沒有顛倒資料。另外,所有的資料都相等。要考慮全面。

不過作者用了個更好的方法,利用了「二分查詢」的方法。詳見《劍指offer》

自己的程式:

#include #include int main(void)

buf = (int *)malloc(n * sizeof(int));

if(!buf)

exit(-1);

for(int i = 0;i < n;++i)

scanf("%d",buf+i);

int *p = buf;

while(*(p+1) >= *p && p < buf+n-1) //這裡必須減一,否則資料全相等時,越界

++p;

if(p >= buf+n-1) //當遞增排序陣列未移動任何資料時

printf("%d\n",*buf);

else

printf("%d\n",*(p+1));

free(buf);

}return 0;

}

劍指offer 面試題8 輸出旋轉陣列最小值

include using namespace std int min int arr,int len return arr q int main int m min arr,6 cout 這種 只能處理常規情況,如果陣列旋轉值為0,即陣列還是乙個遞增陣列,p q mid,陷入死迴圈。如果中間值跟兩...

劍指offer 面試題8 旋轉陣列的最小值

package chapter2 面試題8 旋轉陣列的最小值 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。public class 08 rotatearray int arr...

劍指offer 面試題8 旋轉陣列的最小數值

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