陣列 搜尋旋轉排序陣列 中等

2021-08-20 10:08:45 字數 876 閱讀 4612

描述

假設有乙個排序的按未知的旋轉軸旋轉的陣列(比如,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

挑戰o(logn) time

題目鏈結

分析

這個題目,需要返回目標數字的位置,所以不能進行翻轉還原(這樣做,會特別麻煩)。我們需要找到那個旋轉軸之後的那個數,即在遞增過程中,突然遞減的那個值。這樣可以分成前後兩段陣列,每一段陣列都是遞增的。判斷目標值在具體哪一段陣列裡面,同時需要考慮不在這些陣列裡面的特殊情況。最後,按照二分查詢去尋找該段陣列裡面是否存在目標值。

程式

class solution 

return -1;

} int search(vector&a, int target)

if (target >= a[0] && target <= a[i - 1])//前半段也是遞增的,沒有翻轉,就直接二分查詢

return find_target(a, 0, i - 1, target);

else if (target >= a[i] && target <= a[a.size() - 1])//後半段的遞增的

return find_target(a, i, a.size() - 1, target);

return -1;

}};

陣列 搜尋旋轉排序陣列II 中等

描述 跟進 搜尋旋轉排序陣列 假如有重複元素又將如何?是否會影響執行時間複雜度?如何影響?為何會影響?寫出乙個函式判斷給定的目標值是否出現在陣列中。樣例給出 3,4,4,5,7,0,1,2 和target 4,返回 true 題目鏈結 分析 該題目只需要判斷目標值在陣列中是否存在,所以只需要對其排序...

lintcode 中等題 搜尋旋轉排序陣列II

題目 搜尋旋轉排序陣列 ii 跟進 搜尋旋轉排序陣列 假如有重複元素又將如何?是否會影響執行時間複雜度?如何影響?為何會影響?寫出乙個函式判斷給定的目標值是否出現在陣列中。樣例給出 3,4,4,5,7,0,1,2 和target 4,返回 true 解題 直接法class solution para...

LeetCode33 搜尋旋轉排序陣列 中等

題目描述 假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n ...