演算法學習-查詢旋轉陣列的最小值
題目
假定一個排序陣列以某個位置元素為支點做了旋轉,如:原陣列0 1 2 4 5 6 7旋轉後得到 4 5 6 0 1 2.請找出旋轉後陣列的最小值,假定陣列中沒有重複數字
分析
旋轉之後的陣列實際上可以劃分成兩個有序的組陣列:前面子陣列的大小都大於後面子陣列的元素,注意到實際上最小的元素就是兩個子陣列的分界線
用索引left,right分別指向收尾元素,元素不重複。
若子陣列是普通升序陣列,則A[left]<A[right]。
若子陣列是迴圈升序陣列,前半段子陣列的元素全部大於後半段子陣列中的元素:A[left]>A[right]
計算中間位置mid=(low+hight)/2
顯然,A[low...mid]與A[mid+1...high]必有一個是迴圈升序陣列,一個是普通升序陣列。
若:A[mid]>A[high],說明子陣列A[mid+1,mid+2,...high]迴圈升序;更新low=mid+1;
若:A[mid]<A[high],說明子陣列A[mid+1,...mid+2,...high]普通升序,更新hight=mid;
程式碼如下,也是二分法
int FindMin(int* num, int size)
{
int low = 0;
int high = size - 1;
int mid;
while (low < high)
{
mid = (high + low) / 2;
if (num[mid] < num[high])
high = mid;
else if (num[mid] > num[high])
low = mid + 1;
}
return num[low];
}
相關文章
- 153. 尋找旋轉排序陣列中的最小值排序陣列
- 153. 尋找旋轉排序陣列中的最小值(中)排序陣列
- LeetCode-153-尋找旋轉排序陣列中的最小值LeetCode排序陣列
- 【LeetCode】153. 尋找旋轉排序陣列中的最小值LeetCode排序陣列
- 面試:Java 實現查詢旋轉陣列的最小數字面試Java陣列
- 每日一道演算法:旋轉陣列演算法陣列
- LeetCodeHot100 二分查詢 35. 搜尋插入位置 74. 搜尋二維矩陣 34. 在排序陣列中查詢元素的第一個和最後一個位置 33. 搜尋旋轉排序陣列 153. 尋找旋轉排序陣列中的最小值LeetCode矩陣排序陣列
- LeetCode 189 旋轉陣列LeetCode陣列
- 0二分查詢簡單 牛客NC.71旋轉陣列的最小數字 leetcode劍指 Offer 11. 旋轉陣列的最小數字陣列LeetCode
- 旋轉陣列中的最小元素陣列
- 【LeetCode】189. 旋轉陣列LeetCode陣列
- LeetCode-189-旋轉陣列LeetCode陣列
- LC 189. 旋轉陣列陣列
- Python3實現旋轉陣列的3種演算法Python陣列演算法
- 陣列的主元素查詢陣列
- 1452: 陣列最小值陣列
- LeetCode 33——搜尋旋轉排序陣列LeetCode排序陣列
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 二維陣列查詢陣列
- 二維陣列中的查詢陣列
- LeetCode 81——搜尋旋轉排序陣列 IILeetCode排序陣列
- LeetCode33. 搜尋旋轉排序陣列LeetCode排序陣列
- LeetCode#33搜尋旋轉排序陣列LeetCode排序陣列
- LeetCode33 搜尋旋轉排序陣列LeetCode排序陣列
- 【LeetCode(Java) - 33】搜尋旋轉排序陣列LeetCodeJava排序陣列
- LeetCode每日一題: 旋轉陣列(No.189)LeetCode每日一題陣列
- leetCode33搜尋旋轉排序陣列LeetCode排序陣列
- [轉]旋轉矩陣:點旋轉和座標系旋轉矩陣
- 【JZOF】二維陣列中的查詢陣列
- MongoDB(12)- 查詢嵌入文件的陣列MongoDB陣列
- 陣列的學習陣列
- 力扣·33. 搜尋旋轉排序陣列力扣排序陣列
- 圖解:什麼是旋轉陣列(Rotate Array)?圖解陣列
- leetcode, LC68:旋轉排序陣列搜尋LeetCode排序陣列
- 【劍指offer】7.旋轉陣列的最小數字陣列
- 【劍指 Offer】11. 旋轉陣列的最小數字陣列
- 劍指 Offer 11. 旋轉陣列的最小數字陣列
- 【譯】Swift演算法俱樂部-查詢最大/最小值Swift演算法