題目鏈結假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [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 你可以假設陣列中不存在重複的元素。你的演算法時...