每日一題 搜尋旋轉排序陣列

2021-10-24 13:44:22 字數 1006 閱讀 1060

題目描述:

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

( 例如,陣列 [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 ...