給你乙個整數陣列 nums ,和乙個整數 target 。
該整數陣列原本是按公升序排列,但輸入時在預先未知的某個點上進行了旋轉。(例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。
請你在陣列中搜尋 target ,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。
示例 1:
輸入:nums = [4,5,6,7,0,1,2], target = 0
輸出:4
示例 2:
輸入:nums = [4,5,6,7,0,1,2], target = 3
輸出:-1
示例 3:
輸入:nums = [1], target = 0
輸出:-1
採用二分法的思想, 並結合旋轉陣列的特性, 在[left, mid]
和[mid, right]
中找出哪一段是遞增的
並利用遞增的特性判斷目標數是否在該遞增區間
另一種情況就是遞增區間在[mid, right]
跳出迴圈後需要判斷左邊界的值是否等於目標值, 因為迴圈中更新查詢區間時可能左右指標重疊然後跳出迴圈, 如果指標所指剛好是目標值, 則需要單獨處理
class
solution
// 如果左端的數小於中間的數, 則該區間是遞增區間
if(nums[i]
<= nums[mid]
)else
}else
else}}
return nums[i]
== target ? i :-1
;}}
Leetcode 033 搜尋旋轉排序陣列
示例 1 輸入 nums 4,5,6,7,0,1,2 target 0 輸出 4 示例 2 輸入 nums 4,5,6,7,0,1,2 target 3 輸出 1方法 二分查詢法 思路 因為二分查詢的時間複雜度是log2n,也算是logn級別的,對此可以進行二分查詢 但需要注意 比較中間值和邊界值的...
033搜尋旋轉排序陣列
1 include 000庫函式.h 2 3 自解 68ms 弱爆了4 先找到最大值,然後確定目標值在最大值的左邊還是右邊5 最後使用折中尋找法,找到目標值的位置,此方法應該滿足複雜度不超過logn的要求 6class solution 20else 24while i j 33return 1 3...
Leetcode 搜尋旋轉排序陣列
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...