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

2021-07-22 04:58:03 字數 1051 閱讀 6379

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

其實這裡想了乙個題外話,如果乙個遞增的陣列,一直按照乙個方向無論旋轉多少次,都還是兩個遞增陣列的拼接,如題目中的旋轉就是和的拼接。證明的話,可以用歸納法。

就這道題來說,解法是二分查詢;

int findmin(int* a, int size)  else 

mid = (low + high) / 2;

}return a[high];

}

int findmin(int* a, int size)  else 

mid = (low + high) / 2;

}if (high == size - 1 && a[high] > a[low])

return a[0];

return a[high];

}

然後書上又說了一種情況,index為low,high,mid的三個元素大小都相等。這樣就是說,我們無法判斷最小元素在mid的左邊還是右邊;其實我們可以分兩種情況,然後回溯,但是如果資料規模太大,可能會導致棧的深度很深,所以書上採用的一種思路是遇到這種情況直接遍歷就好,也不是沒有道理。

那麼現在:

int findmin(int* a, int size) 

int high = size - 1;

int low = 0;

int mid = (high + low) / 2;

while(low < high - 1)

return a[minindex];

}if (a[mid] > a[low]) else

mid = (low + high) / 2;

}if (high == size - 1 && a[high] > a[low])

return a[0];

return a[high];

}

劍指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 分析 ...