LeetCode 033 搜尋旋轉排序陣列

2021-10-10 23:20:14 字數 847 閱讀 5618

給你乙個整數陣列 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 級別。示例...