leetcode 33 搜尋旋轉排序陣列

2021-10-05 13:18:21 字數 948 閱讀 8507

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

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

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

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

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

示例 1:

輸入: nums =

[4,5,6,7,0,1,2], target = 0

輸出: 4

示例 2:

輸入: nums =

[4,5,6,7,0,1,2], target = 3

輸出: -1

思路:二分

由於題目要求時間複雜度必須為o(logn)級別,所以必須要使用二分查詢,不能線性查詢

1.雖然陣列本身不是有序的,但是是部分有序的,且以mid為分界點,左右兩邊一定有一邊是有序的,如題目示例中,[4,5,6,7,8,0,1,2]中,分界點mid=(left+right)/2=7。 7左邊為[4,5,6],右邊為[8,0,1,2]

左邊有序。每次二分先對有序的一邊進行判斷。

2.首先判斷左半邊是否有序,如果有序,判斷target是否落在這個區間內,如果是,right=mid-1,否則,left=mid+1。

3.如果左半邊無序,則右邊一定有序,判斷target是否落在這個區間內,如果是,left=mid+1,否則,right=mid-1。

ac**:(c++)

class

solution

int left =

0, right = n -1;

while

(left <= right)

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 你可以假設陣列中不存在重複的元素。你的演算法時...