LintCode 尋找旋轉排序陣列中的最小值

2021-07-05 15:34:33 字數 1315 閱讀 4270

1 . 尋找旋轉排序陣列中的最小值

假設乙個旋轉排序的陣列其起始位置是未知的(比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2)。

你需要找到其中最小的元素。

你可以假設陣列中不存在重複的元素。

樣例 給出[4,5,6,7,0,1,2] 返回 0

solution: 本題可以直接使用蠻力法計算複雜度為o(n),但是使用蠻力法的話會失去本題的意思,因為陣列是由排序陣列旋轉之後構成的並且沒有重複的元素,因此,我們可以使用二分法來求解這個問題。

二分法會保持三個索引first, mid 和 last。乙個旋轉之後的排序陣列其最小值只有三種情況。

1.在mid的左邊

2.就為mid

3.在mid的右邊

因為陣列是由排序陣列經過旋轉之後所構成,並且從上面的可以看出,當num[mid] > num[last]時其最小值必定在[mid, last]區間,否則在[first, mid]區間。則,我們可以繼續對這個區間進行判斷直到只有兩個元素時停止計算。

code .

class solution 

return num[first] < num[last] ? num[first] : num[last];}};

2 . 尋找旋轉排序陣列中的最小值 ii

假設乙個旋轉排序的陣列其起始位置是未知的(比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2)。

你需要找到其中最小的元素。

陣列中可能存在重複的元素

樣例 給出[4,4,5,6,7,0,1,2] 返回 0

solution: 因為陣列中存在相同的元素及有可能存在nums[mid] = nums[last]的情況,這時上面三種情況就不管用了。因為當nums[mid]=nums[last]時,最小值在mid的左邊還是右邊沒有辦法進行判斷。此時唯一可以確定的是last一定不是最小值(當最小值唯一時),因此我們可以通過把last向前移動一步來減少搜尋區間

LintCode 尋找旋轉排序陣列中的最小值 II

假設乙個旋轉排序的陣列其起始位置是未知的 比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2 你需要找到其中最小的元素。陣列中可能存在重複的元素。樣例 給出 4,4,5,6,7,0,1,2 返回 0 這次可以出現重複元素,很簡單,只要判斷的時候加等於的判斷即可,如果mid等於end...

LintCode 搜尋旋轉排序陣列

假設有乙個排序的 按未知的旋轉軸旋轉的 陣列 比如,0 1 2 4 5 6 7 可能成為 4 5 6 7 0 1 2 給定乙個目標值進行搜尋,如果在陣列中找到目標值返回陣列中的索引位置,否則返回 1。你可以假設陣列中不存在重複的元素。您在真實的面試中是否遇到過這個題?yes 樣例給出 4,5,1,2...

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 給出 ...