查詢某元素是否在在陣列中返回位置,要求時間複雜度不能大於o(n)
使用二分查詢
問題的關鍵在於找到最大值所在位置
屬於前半部分就在前半部分二分查詢,否則在後半部分二分查詢
func search(arr:[int],value :int) -> int?else
if value >= arr[0] && value <=arr[maxindex]
else
if value >= arr[maxindex + 1] && value <= arr[arr.count - 1
]
return
nil}
//二分查詢
func binearsearch(arr:[int],start:int,end:int,value:int) ->int
else
if arr[m] else
if arr[m] >value
}return -1}//
查詢最大位置
func searchmaxoption(arr:[int]) ->int
else
if arr[middel] else
}}
扭轉有序陣列 查詢指定元素
面試題 扭轉後的有序陣列,找到指定的數,返回下標,找不到時返回 1 樣例輸入 3,4,5,6,7,1,2 查詢數字7 樣例輸出 4 審題 有序,扭轉,那麼一部分是有序的,一部分是無序的 思路 二分查詢,必須找到 關鍵點在於 1.利用中間元素去判斷,因為是已經有序的,如果左側小於它,而扭轉後的元素一定...
在旋轉有序陣列中查詢元素
1.題目 給定乙個旋轉的有序陣列,比如是旋轉之後得到的,在陣列中查詢是否存在元素key。要求時間複雜度為o lgn 假定陣列中不存在重複元素。2.分析 從上面的選擇陣列可以發現,array middle 將陣列分成兩段,兩段中必有一段是有序的。這樣就可以使用二分查詢了。乙個變形的二分查詢。3.1 i...
演算法 有序陣列中值
有兩個已排序陣列a b,各自大小分別為m,n。找到兩個已排序陣列的中值。將整個集合分為兩個等長的子集,使一邊的值總是大於另一邊。這道題,可以將a b看作乙個整體,然後劃分為左右兩部分l和r,並且滿足ma x l mi n r max l min r 當總個數 m n 位奇數時,結果為 ma x l ...