演算法學習-查詢旋轉陣列的最小值
題目
假定一個排序陣列以某個位置元素為支點做了旋轉,如:原陣列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];
}
相關文章
- 【劍指offer】旋轉陣列的最小值陣列
- 演算法學習記錄七(C++)--->二分法找有序旋轉陣列最小值演算法C++陣列
- 每天一題(2)--旋轉陣列求最小值陣列
- 面試:Java 實現查詢旋轉陣列的最小數字面試Java陣列
- 微策略面試題:在旋轉後的陣列中查詢元素(二分查詢)面試題陣列
- LintCode 尋找旋轉排序陣列中的最小值 II排序陣列
- 153. 尋找旋轉排序陣列中的最小值(中)排序陣列
- LeetCode-153-尋找旋轉排序陣列中的最小值LeetCode排序陣列
- 【LeetCode】153. 尋找旋轉排序陣列中的最小值LeetCode排序陣列
- 演算法學習記錄一(C++)--->二維陣列中的查詢演算法C++陣列
- 每日一道演算法:旋轉陣列演算法陣列
- java陣列回顧---線性查詢最大值最小值---二分查詢Java陣列
- 旋轉陣列中的最小元素陣列
- LeetCodeHot100 二分查詢 35. 搜尋插入位置 74. 搜尋二維矩陣 34. 在排序陣列中查詢元素的第一個和最後一個位置 33. 搜尋旋轉排序陣列 153. 尋找旋轉排序陣列中的最小值LeetCode矩陣排序陣列
- [JAVA]陣列旋轉輸出Java陣列
- 0二分查詢簡單 牛客NC.71旋轉陣列的最小數字 leetcode劍指 Offer 11. 旋轉陣列的最小數字陣列LeetCode
- 陣列的主元素查詢陣列
- LC 189. 旋轉陣列陣列
- 演算法求陣列中的最大值最小值演算法陣列
- Python3實現旋轉陣列的3種演算法Python陣列演算法
- 二維陣列查詢陣列
- JavaFX教程-查詢陣列Java陣列
- lisp 習題 矩陣旋轉Lisp矩陣
- 【譯】Swift演算法俱樂部-查詢最大/最小值Swift演算法
- 二維陣列中的查詢陣列
- 三維重建學習(1):基礎知識:旋轉矩陣與旋轉向量矩陣
- 1452: 陣列最小值陣列
- JavaScript --二維陣列查詢一維陣列JavaScript陣列
- LeetCode 189 旋轉陣列LeetCode陣列
- Lintcode 恢復旋轉陣列陣列
- 陣列的學習陣列
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- Java陣列排序和查詢Java陣列排序
- js查詢陣列元素位置JS陣列
- 陣列使用find查詢用法陣列
- MongoDB(12)- 查詢嵌入文件的陣列MongoDB陣列
- 【JZOF】二維陣列中的查詢陣列