在旋轉有序陣列內找特定的值

2021-09-22 10:35:38 字數 909 閱讀 2611

要求

給定一沒有重複元素的旋轉陣列(它對應的原陣列是有序的),求給定元素在旋轉陣列內的下標(不存在的返回-1)。

例如

有序陣列為{0,1,2,4,5,6,7},它的乙個旋轉陣列為{4,5,6,7,0,1,2}。

分析

遍歷一遍,可以輕鬆搞定,時間複雜度為o(n),因為是有序陣列旋轉得到,這樣做肯定不是最優解。有序,本能反映用二分查詢,舉個例子看看特點

可以看出中間位置兩段起碼有乙個是有序的(不是左邊,就是右邊),那麼就可以在有序的範圍內使用二分查詢;如果不再有序範圍內,就到另一半去找。

參考**

int search(int a, int n, int

target)

else

}return -1

; }

擴充套件上邊的有求是沒有重複的元素,現在稍微擴充套件下,可以有重複的元素,其他的要求不變。

思路

大致思路與原來相同,這是需要比較a[beg] 與 a[mid]的關係

bool search(int a, int n, int

target)

else

if(a[beg] >a[mid])

else

++beg;

}return

false

; }

在旋轉有序陣列中查詢元素

1.題目 給定乙個旋轉的有序陣列,比如是旋轉之後得到的,在陣列中查詢是否存在元素key。要求時間複雜度為o lgn 假定陣列中不存在重複元素。2.分析 從上面的選擇陣列可以發現,array middle 將陣列分成兩段,兩段中必有一段是有序的。這樣就可以使用二分查詢了。乙個變形的二分查詢。3.1 i...

有序陣列旋轉的問題

一般情況下我們的第一反應肯定是遍歷此陣列,但這肯定不是我們所期望的,因為此陣列是有序陣列旋轉而成,所以我們此時應該想到用二分法來尋找陣列中的最小值。假設我們給定遞增陣列 旋轉後的陣列有下面幾種形式 通過觀察可以發現,在經過旋轉後的陣列在尋找最小值的過程中0的前面的數總是大於0後面的數,所以我們可以以...

有序陣列的旋轉陣列的最小值

點 二分查詢深度運用,抽象分析問題 題意 如 0,1,2,3,4,5 是乙個遞增陣列,3,4,5,0,1,2 就是其乙個旋轉陣列,即3 4 5旋轉到了陣列頭部。注意包括 0,1,1,1,1,1 這也算是乙個遞增陣列。給定任意乙個遞增陣列的旋轉陣列,求裡邊元素的最小值。劍指offer面試題8 思路 直...