leetcode 33 搜尋旋轉排序陣列

2021-10-05 13:09:59 字數 1324 閱讀 4732

題目鏈結

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

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

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

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

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

class

solution

if(start == end)if(

(array[start]

<= array[end])&&

((target < array[start])||

(array[end]

< target)))

int middle =

(start + end)/2

;if(array[middle]

== target)

if(array[start]

<= array[middle]

)else

}int

search

(vector<

int>

& nums,

int target)

array = nums;

return

findtarget(0

, len -

1, target);}

};

執行結果:通過

執行用時 : 4 ms, 在所有 c++ 提交中擊敗了80.04%的使用者

記憶體消耗 : 6.8 mb, 在所有 c++ 提交中擊敗了100.00%的使用者

本道題通過給定的時間複雜度要求可知應該是要用二分法,但本題給定的陣列是旋轉以後的陣列,通過觀察,我們可以知道,如果我們在陣列的中心分開,則一半是順序陣列,另一半必然還是旋轉陣列,這樣我們可以先判斷哪半數組是順序陣列,然後很容易判斷target是否在這個順序陣列內,如果在,則在順序陣列內遞迴查詢,否則在另一半陣列中查詢,需要注意的是關於邊界值的處理。

class

solution

if(nums[left]

<= nums[mid]

)else

}else

else}}

return-1

;}};

範例做法和我類似,但是沒有用遞迴。

leetcode33 搜尋旋轉排列陣列

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

LeetCode 33 搜尋旋轉排序陣列

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

leetcode 33 搜尋旋轉排序陣列

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