(未實現)33 搜尋旋轉排序陣列 二分法

2021-10-14 09:58:09 字數 1273 閱讀 9532

4.相關知識

33. 搜尋旋轉排序陣列

公升序排列的整數陣列 nums 在預先未知的某個點上進行了旋轉(例如, [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

1<= nums.length <=

5000-10

^4<= nums[i]

<=10^

4nums 中的每個值都 獨一無二

nums 肯定會在某個點上旋轉-10

^4<= target <=10^

4

未ac

暴力解法一定可以,但過於簡單,題目一定要求時間複雜度更低的演算法

比遍歷一次更簡單的演算法:logn的二分法

在二分法的判斷**現了問題

class

solution

else

if(nums[mid]

> target)

else

return mid;

}return-1

;}}

二分一定會將陣列分為有序的一部分和錯序的一部分,我們只需要判斷target是否在有序的那部分,否則一定在無序的那部分,縮小區間

通過mid將陣列分為三部分,mid, [left, mid - 1]和[mid+1, right],當分為三部分時,迴圈條件為left <= right,這是因為搜尋區間為[left, right],迴圈跳出時left > right, 此區間為空,則找不到目標

通過判斷nums[mid] 和 nums[0]的大小來確定哪個區間是有序的

class

solution

else

}return-1

;}}

二分 33 搜尋旋轉排序陣列

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

二分查詢 33 搜尋旋轉排序陣列

今天是2020年4月27日,星期一。今天的題目正好是我們前幾天學習的二分查詢,可以進一步鞏固學習內容。假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,...

33 搜尋旋轉排序陣列 C 二分查詢

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