假設有乙個排序的按未知的旋轉軸旋轉的陣列(比如,0 1 2 4 5 6 7可能成為4 5 6 7 0 1 2)。給定乙個目標值進行搜尋,如果在陣列中找到目標值返回陣列中的索引位置,否則返回-1。
你可以假設陣列中不存在重複的元素。
樣例
給出[4, 5, 1, 2, 3]和target=1,返回 2
給出[4, 5, 1, 2, 3]和target=0,返回 -1
還是二分法,關鍵就是想明白二分之後怎麼辦,前半和後半有什麼關係,有哪些情況?
分一半之後三種情況
1、正好中間就是target,找到了
2、前半是排好序的,a[mid]>=a[left],如果target在這個範圍,二分繼續查下去就行了
3、後半是排好序的,a[mid]所以重點還是從無序中找出有序,有序中找就成了常規的二分問題
1int search(vector &a, int
target)
10if(a[mid]>=a[left])
14else17}
18else
22else25}
26}27return -1
;28 }
62 搜尋旋轉排序陣列
原題 你可以假設陣列中不存在重複的元素。您在真實的面試中是否遇到過這個題?是 給出 4,5,1,2,3 和target 0,返回 1 標籤二分法 陣列排序陣列 思路 原始想法是找到旋轉軸 i,找到後判斷target在哪個部分,在哪個部分就對哪個部分使用二分法。時間複雜度是i log n i ac c...
lintcode 搜尋旋轉排序陣列 62
假設有乙個排序的 按未知的旋轉軸旋轉的 陣列 比如,0 1 2 4 5 6 7可能成為 4 5 6 7 0 1 2 給定乙個目標值進行搜尋,如果在陣列中找到目標值返回陣列中的索引位置,否則返回 1。你可以假設陣列中不存在重複的元素。樣例 給出 4,5,1,2,3 和target 1,返回 2 給出 ...
搜尋旋轉排序陣列
假設有乙個排序的按未知的旋轉軸旋轉的陣列 比如,0 1 2 4 5 6 7 可能成為4 5 6 7 0 1 2 給定乙個目標值進行搜尋,如果在陣列中找到目標值返回陣列中的索引位置,否則返回 1。你可以假設陣列中不存在重複的元素。分析 特殊的陣列搜尋某一元素問題,二分法。這一題的難點在於如何尋找二分的...