將乙個排序好的陣列的前一部分和後一部分進行調換,找到這個陣列中的
將乙個排好序的陣列開始的某幾個元素搬到陣列末尾,然後找到該陣列的最小元素。
這個題一看如果遍歷一遍陣列肯定可以找到,但並沒有利用旋轉陣列的特性,為o(n),可以發現特點就是最小的數字是前後兩個陣列的分界點,如果按原來的思路就是遍歷,然後找到乙個數字小於前乙個數字,它肯定是最小數字,但這樣最好為o(1),最差為o(n),總體為o(n)
所以要利用二分查詢來實現o(logn)的查詢更好一點
用兩個指標分別指向最前面和最後面,如果,找到中間元素,如果它處於前半部分,則應該大於最後乙個元素,此時最小元素在後半部分如果處於後半部分,則應該小於最後乙個元素,此時最小元素在前半部分。如果low和high之間差1,則low是陣列最後乙個元素,high是陣列開始的第乙個元素,返回array[high]即可。
如果有特殊情況就是沒有搬移,則第乙個元素是小於最後乙個元素的,則直接返回第乙個元素
public class solution
int low=0;
int high=array.length-1;
if(array[low]
)while
(low<=high)
else
if(array[mid]
)else
}return0;
}}
二分法解旋轉陣列的最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 3,4,5,1,2 為 1,2,3,4,5 的乙個旋轉,該陣列的最小值為1。示例 1 輸入 3,4,5,1,2 輸出 1 示例 2 輸入 2,2,2,0,1 輸出 ...
演算法 查詢 旋轉陣列的最小數字(改造二分法)
題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,改陣列的最小值為1.分析 既然說是改造的二分法,那麼就是找到中間值,然後根據左邊還是右邊去找最小值,然後在左邊或者右邊再找中間值再分左邊和右邊。現在...
二分法旋轉陣列找最小數
一 題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。note 給出的所有元素都大於0,若陣列大小為0,請返回0。示例1輸入 3,4,5,1,2 返回值1 二 思路 這道題要求用二分法,一開始用的是遍歷的方法,時間...