假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [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(n
)o(n
),顯然不符合要求,那只能還是使用二分。我們可以想,既然乙個數字是旋轉排序的,那麼我們取中點,中點左右兩邊一定有一邊是排序好的,比如說[ 4 , 1 , 2 , 3], 以1為中點,那麼他的右邊就是排序好的,左邊就是沒有排序好的,如果target在排序好的那組,那就直接二分;如果在沒排序好的那裡,就在迭代尋找。
**如下
class
solution
if(nums[mid]
>= nums[left]
)else
}else
else}}
return-1
;}// public static void main(string args) ;
// int localtion = s.search(list, 5);
// system.out.println(localtion);
// }
}
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 你可以假設陣列中不存在重複的元素。你的演算法時...