LeetCode 搜尋旋轉排序陣列 兩次二分

2021-09-26 07:51:54 字數 1249 閱讀 8280

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。

( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。

搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。

你可以假設陣列中不存在重複的元素。

你的演算法時間複雜度必須是 o(log n) 級別。

示例 1:

輸入: nums = [4,5,6,7,0,1,2], target = 0

輸出: 4

示例 2:

輸入: nums = [4,5,6,7,0,1,2], target = 3

輸出: -1

分析:時間複雜度要求是o(log n),原陣列又是通過有序的陣列變換得來的,所以我們可以聯想到二分

先二分得到分割點k,分割點具有這樣的特徵:nums[k]>=nums[k+1]

找到了分割點k,我們可以得到兩個區間:[0,k】,【k+1,n-1]

通過比較兩個區間端點和target的大小關係,我們可以確定target位於兩個區間中的哪乙個

區間中的數肯定是有序的,這樣我們可以在區間中繼續通過二分來尋找target

總結:

兩個二分,第一次尋找分割點,第二次尋找target

時間複雜度:o(log n)

空間複雜度:o(1)

class

solution

intl,h;

l=0; h=n-1

;

if(v[l]//

不存在分割點

else

else}}

//通過分割點確定target所屬區間

if(k==-1

)

if(t>v[n-1

])

else

if(t0

])

while(l<=h)//

在區間中二分尋找target

else

if(v[mid]else

if(v[mid]==t)

}return -1;}

};

Leetcode 搜尋旋轉排序陣列

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...

leetcode 搜尋旋轉排序陣列

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...

LeetCode 搜尋旋轉排序陣列

原題鏈結 33.搜尋旋轉排序陣列 給你乙個整數陣列 nums 和乙個整數 target 該整數陣列原本是按公升序排列,但輸入時在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 請你在陣列中搜尋 target 如果陣列中存在這個目標值,則返回...