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