劍指offer 11 二分處理兩個順序陣列 很經典

2021-10-22 06:23:06 字數 505 閱讀 1893

此題又是一道無敵的題目,其二分處理之難想令人髮指。常規的二分如果想讓左指標=mid+1,說明左指標偏右,要讓mid值偏左,所以向下取整。此題如果大於右邊,說明mid在左邊部分,取mid+1. 所以要此題也要向下取整。

關鍵是在等於時的處理,由於本題的特殊性,如果mid等於右邊,無法判斷向左還是向右。此時我們讓右指標向左移動一位。現在要證明的是,這一次移動不會有危險。什麼叫危險?就是右指標恰好指向我們要找的數。若發生這種情況,我們可以發現,mid仍然等於這個數,這個數仍在搜尋區間。

讓我們思考一下,此時mid在左邊區域還是右邊區域?一定是左邊區域,因為我們恰好去掉的就是交界處靠右的元素。但此時mid在左邊,說明左邊全都是這個數。所以最終返回的還是這個數。

class

solution

return l;

}int

minarray

(vector<

int>

& numbers)

};

劍指offer 11 合併兩個有序鍊錶

題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。class listnode def init self,x self.val x self.next none class solution 返回合併後列表 defmerge self,phead...

劍指offer 在排序陣列中查詢數字(二分查詢)

統計乙個數字在排序陣列 現的次數。例如,對排序陣列和數字3,由於3在這個陣列 現了4次,因此輸出4。對於排序陣列中查詢,首先考慮使用二分查詢。該題目要求統計元素出現的次數,則可以分解以下步驟 1 找到該元素在排序陣列中最左邊的位置leftindex 2 找到該元素在排序陣列中最右邊的位置righti...

二分 尋找兩個正序陣列的中位數

力扣 尋找兩個正序陣列的中位數 hard 如下圖所示,中位數必然滿足這樣的分割線,將兩個陣列分別分為兩個部分,最終組成四個部分,分別為t1 left,t1 right,t2 left,t2 right,其中t1代表第乙個陣列,t2代表第二個陣列,left 代表分割線左邊的部分,right 代表分割線...