LeetCode33 搜尋旋轉排序陣列

2022-09-03 02:33:11 字數 872 閱讀 2143

方法一:先找到旋轉點,然後根據目標值重新確定二分查詢區域。

時間複雜度:用到兩次二分查詢,每次二分查詢粗略的認為是o(logn),那麼時間複雜度為2 * o(logn);

空間複雜度:o(1)。

1

int search(vector& nums, int

target)

18 rotate = mid + 1;19

}20//重新規劃二分查詢區域

21if (!rotate)

2226

else

2734

else

35 39}

40//

二分查詢

41while (low <=high)

4248

49return -1

;50 }

方法二:根據中間點和其他條件來調整上下邊界。其實一開始就想的這個辦法,但是寫的過程中發現很混亂,所以就寫了上一種比較清晰的方法。這個方法的關鍵是確定哪半邊是有序的,在這個前提下分情況討論會很清晰。

時間複雜度:o(logn),空間複雜度:o(1)。

1

int search(vector& nums, int

target)

14return -1;15

}16else

//陣列有旋轉點

1729

else

//右半邊有序

3035}36

return -1;37

}38 }

總結:1)分析時把握問題的特徵,不要沒有頭緒的想,不然就是猜了;

2)o(logn)複雜度是非常優秀的時間複雜度。

leetcode33 搜尋旋轉排列陣列

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

LeetCode 33 搜尋旋轉排序陣列

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

leetcode 33 搜尋旋轉排序陣列

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