題目描述:
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [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
因為陣列只是在某個點發生了旋轉,可以保證的是陣列旋轉之後的兩個部分都還是有序的。因此在查詢的時候可以應用二分查詢:(1)如果在中點直接找到了目標值,就直接返回;(2)否則比較左端點值和中值,若左端點值小於等於中值,說明左半部分有序,如果target剛好落在左半部分,則在左半部分查詢,否則到右半部分查詢;(3)若不滿足左端點值小於等於中值,說明右半部分有序,如果target剛好落在右半部分,則在右半部分查詢,否則到左半部分查詢;(4)退出迴圈時,沒有找到target,說明不存在,返回 -1。
**實現
class
solution
//然後再在有序的那一部分找
//前面一半有序
if(nums[left]
<= nums[mid]
)else
left = mid +1;
}//後一半有序
else
else
right = mid -1;
}}//沒有找到,返回-1
return-1
;}}
每日刷題 搜尋旋轉排序陣列II
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。注意,該陣列可能存在重複元素。例如,陣列 0,0,1,2,2,5,6 可能變為 2,5,6,0,0,1,2 編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。示例 例 1 輸入 nums 2,5,6,0...
每日一題 按奇偶排序陣列
給定乙個非負整數陣列 a,返回乙個陣列,在該陣列中,a 的所有偶數元素之後跟著所有奇數元素。你可以返回滿足此條件的任何陣列作為答案。輸入 3,1,2,4 輸出 2,4,3,1 輸出 4,2,3,1 2,4,1,3 和 4,2,1,3 也會被接受。1 a.length 5000 0 a i 5000最...
演算法題 搜尋旋轉排序陣列
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1。你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。1 ...