付費限定

【專論】Binary Search 到底該不該套模板來解題?

更新於 發佈於 閱讀時間約 7 分鐘


★ 付費 Premium 專享 ★


↑看個小廣告,支持好內容↑



二分搜尋 (Binary Search) 是優於線性搜尋的演算法,相較於一個一個找,二分法總是奉行「中央一刀切」,每次都將查找的範圍縮小一半,假設我們要在 長度=7 的陣列找數字 99,線性搜尋會很衰地連找七次才找到,但二分搜尋可以確保在三次以內就搞定。這就是O(n)O(logn)的差別:

raw-image


很顯然,二分法的大前提是只適用於排序好的資料。由於思路單純固定,有人會將二分搜尋的步驟模板化,用套版公式解題;但也有人認為應該先了解題意,不要死背解法,到底該聽哪一邊的呢?


先說結論,我認為主要的模板是可以記的,但是各題目要求的輸出、邊界狀況不同,這就要酌情滾動式調整了。

// 0.確認搜尋策略

// 1.界定搜尋範圍

// 2.當兩者範圍重疊,即離開迴圈
while(left<right){
let mid=left+Math.floor((right-left)/2);

// 3A.中間項之運算仍小於目標,左半邊都不用找了
if(運算結果<target){
left=mid+1;
// 3B.中間項之運算不小於目標,則成為新的右端點
}else{
​right=mid;
}
}

// 4.檢查邊界條件、輸出結果​


來找幾個經典題試試,在陣列中搜尋項目時,left,right 代表首項和末項:

704. Binary Search

輸出結果:index-1 (若該數字不存在)
搜尋策略:首個不小於 target 的位置
// 1.界定搜尋範圍
let left=0, right=arr.length-1;

// 2.當兩者範圍重疊,即離開迴圈
while(left<right){
let mid=left+Math.floor((right-left)/2);

// 3A.中間項之運算仍小於目標,左半邊都不用找了
if(arr[mid]<target){
left=mid+1;
// 3B.中間項之運算不小於目標,則成為新的右端點
}else{
​right=mid;
}
}

// 4.檢查該項是否等同target,若無則輸出-1​
// nums=[3,4,8,10], target=8: 輸出 2
// nums=[3,4,8,10], target=9: 輸出 -1
return nums[left]==target? left: -1;


35. Search Insert Position

輸出結果:index (表示數字出現或插入之處)
搜尋策略:首個不小於 target 的位置
// 1.界定搜尋範圍
let left=0, right=arr.length-1;

// 2.當兩者範圍重疊,即離開迴圈
while(left<right){
let mid=left+Math.floor((right-left)/2);

// 3A.中間項之運算仍小於目標,左半邊都不用找了
if(arr[mid]<target){
left=mid+1;
// 3B.中間項之運算不小於目標,則成為新的右端點
}else{
​right=mid;
}
}

// 4.如果該項仍然小於target,則插入在陣列最後
// nums=[1,3,5,6], target=6: 輸出 3
// nums=[1,3,5,6], target=7: 輸出 4
return nums[left]>=target? left: left+1;


如果是猜數字或數學問題,left,right 就會代表可行解的範圍:

278. First Bad Version

以行動支持創作者!付費即可解鎖
本篇內容共 3116 字、0 則留言,僅發佈於哩哩叩叩平安符:LeetCode 刷題筆記你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
avatar-img
54會員
59內容數
我要成為 LeetCode 王!快跟我一起踏上旅程!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
LeetCode King 的其他內容
給你一堆字母請你湊出單字,Scramble 貌似也是這樣玩的 (?
成對的數字裡出現一個落單的邊緣人,我有六種方法找出它,你會幾種呢?
正確答案居然有無限多組!找到任何一種就算通過,這是怎麼回事?
陣列可以說是最常見的資料結構,LeetCode 裡的題目有過半都和 Array 有關,因此也通常是解題新手的第一站。在第一篇專文,我們就從它的操作方法講起。
千萬不要傻傻乘開啦,這題有好幾種優雅的做法~
索引很好用,但一定要做索引才能解決計數問題嗎?超車對手的機會來了!
給你一堆字母請你湊出單字,Scramble 貌似也是這樣玩的 (?
成對的數字裡出現一個落單的邊緣人,我有六種方法找出它,你會幾種呢?
正確答案居然有無限多組!找到任何一種就算通過,這是怎麼回事?
陣列可以說是最常見的資料結構,LeetCode 裡的題目有過半都和 Array 有關,因此也通常是解題新手的第一站。在第一篇專文,我們就從它的操作方法講起。
千萬不要傻傻乘開啦,這題有好幾種優雅的做法~
索引很好用,但一定要做索引才能解決計數問題嗎?超車對手的機會來了!
你可能也想看
Google News 追蹤
Thumbnail
本文探討專家論述如何影響對個體的看法。在主流文化中,專家用特定的標準定義個體,忽略其多樣性與獨特性。以小明的故事為例,展示傳統觀點如何削弱他的個性,並促使讀者反思自身對他人的判斷。透過重新敘述小明的故事,本文強調斷裂的理解及每種個體的潛能,呼籲社會去除對個體的刻板印象,讓生命的多樣性得以展現。
Thumbnail
按摩學徒的必要性 隨著現代生活節奏的加快,工作壓力增大,越來越多的人開始尋求按摩來放鬆身心。按摩師這一職業需求量也隨之增加,對於那些對這個行業感興趣的人來說,參加專業論壇可以提供一個絕佳的入門機會。通過專業論壇,學徒們能夠獲得寶貴的經驗和知識,為未來的職業生涯打下堅實的基礎。 中華撥筋傳統整
Thumbnail
國立虎尾科技大學通識教育中心李玉璽教授出版專書論文,論述樸雅吟社。該論文收錄於嘉義大學中文系林宏達副教授2024年主編之《臺灣古典詩社采風》系列叢書,該叢書收錄台灣全國各地至今仍持續運作的著名台語漢文詩社,第二輯介紹「樸雅吟社」與「梅川傳統文化學會」。
Thumbnail
   當兒童正常化,發展好人類傾向,那自然是朝善的方向去發展,擁有足夠的愛及接納,會尋找自身的價值及意義,於是幫助他人及環境的行為就會產生了。成人應用愛及尊重的態度,屏除成見,觀察與幫助孩子發展人類傾向。不求上進的人必是童年時期沒有發展好人類傾向。   照顧者對孩子從小到大的言語,會成為孩子長大後
Thumbnail
在排序資料內執行二分搜尋,具有 O(logn) 的複雜度優勢。由於思路單純固定,有人會將其步驟模板化,但死背解法貌似有點危險?
作者除了嘲笑台灣各媒體,至今無法正確解讀日本官員的國際政治語法之外,也不忘奚落和作者不同政治立場,為「戰略清晰」日本代表的前首相麻生太郎,對台灣人民的談話未被準確解讀,將之謂為「政治藝術」。
長久以來台灣人民一直想要求中國的中華民國台灣當局帶領台灣人民接軌國際。這樣的想法不只是一廂情願而是「請鬼開藥單」,是自尋死路、本末倒置的做法。如此一來一九五二年《對日和平條約》(通稱《舊金山和約》起草人美國國國務卿杜斯勒對台灣住民的主權「懸而未決」之想法,勢必將從「啓發」成為「幻想、泡影」。這一代台
台灣媒體各界抱持「己願他力」、坐享其成的心態,長期對台灣人民誇大解讀,美國對台海危機政治性的佈署動作,這些其實都是助長中國阻止「台灣人民自決意識」之目的,對中國併吞台灣之進程上有加乘效果。
作者明確的指出,美國政府出售台灣武器,等同是在一個中國之下為北京看守台灣,是在延續錯誤的「戰略模糊」政策,美國有必要《重新檢視美國的台灣安全策略》,然前提關鍵其實是在台灣人民的覺醒,對此台灣人必須要有自知之明。
Thumbnail
美智庫親中派連續對台灣讀者發表專文,包括中國學者開始參與其中令人注目,「台灣」不是「台灣共和國」,防衛台灣不是世界的責任。「台灣的真相」美國人知道、中國人知道,只有台灣人不知道。
Thumbnail
本文探討專家論述如何影響對個體的看法。在主流文化中,專家用特定的標準定義個體,忽略其多樣性與獨特性。以小明的故事為例,展示傳統觀點如何削弱他的個性,並促使讀者反思自身對他人的判斷。透過重新敘述小明的故事,本文強調斷裂的理解及每種個體的潛能,呼籲社會去除對個體的刻板印象,讓生命的多樣性得以展現。
Thumbnail
按摩學徒的必要性 隨著現代生活節奏的加快,工作壓力增大,越來越多的人開始尋求按摩來放鬆身心。按摩師這一職業需求量也隨之增加,對於那些對這個行業感興趣的人來說,參加專業論壇可以提供一個絕佳的入門機會。通過專業論壇,學徒們能夠獲得寶貴的經驗和知識,為未來的職業生涯打下堅實的基礎。 中華撥筋傳統整
Thumbnail
國立虎尾科技大學通識教育中心李玉璽教授出版專書論文,論述樸雅吟社。該論文收錄於嘉義大學中文系林宏達副教授2024年主編之《臺灣古典詩社采風》系列叢書,該叢書收錄台灣全國各地至今仍持續運作的著名台語漢文詩社,第二輯介紹「樸雅吟社」與「梅川傳統文化學會」。
Thumbnail
   當兒童正常化,發展好人類傾向,那自然是朝善的方向去發展,擁有足夠的愛及接納,會尋找自身的價值及意義,於是幫助他人及環境的行為就會產生了。成人應用愛及尊重的態度,屏除成見,觀察與幫助孩子發展人類傾向。不求上進的人必是童年時期沒有發展好人類傾向。   照顧者對孩子從小到大的言語,會成為孩子長大後
Thumbnail
在排序資料內執行二分搜尋,具有 O(logn) 的複雜度優勢。由於思路單純固定,有人會將其步驟模板化,但死背解法貌似有點危險?
作者除了嘲笑台灣各媒體,至今無法正確解讀日本官員的國際政治語法之外,也不忘奚落和作者不同政治立場,為「戰略清晰」日本代表的前首相麻生太郎,對台灣人民的談話未被準確解讀,將之謂為「政治藝術」。
長久以來台灣人民一直想要求中國的中華民國台灣當局帶領台灣人民接軌國際。這樣的想法不只是一廂情願而是「請鬼開藥單」,是自尋死路、本末倒置的做法。如此一來一九五二年《對日和平條約》(通稱《舊金山和約》起草人美國國國務卿杜斯勒對台灣住民的主權「懸而未決」之想法,勢必將從「啓發」成為「幻想、泡影」。這一代台
台灣媒體各界抱持「己願他力」、坐享其成的心態,長期對台灣人民誇大解讀,美國對台海危機政治性的佈署動作,這些其實都是助長中國阻止「台灣人民自決意識」之目的,對中國併吞台灣之進程上有加乘效果。
作者明確的指出,美國政府出售台灣武器,等同是在一個中國之下為北京看守台灣,是在延續錯誤的「戰略模糊」政策,美國有必要《重新檢視美國的台灣安全策略》,然前提關鍵其實是在台灣人民的覺醒,對此台灣人必須要有自知之明。
Thumbnail
美智庫親中派連續對台灣讀者發表專文,包括中國學者開始參與其中令人注目,「台灣」不是「台灣共和國」,防衛台灣不是世界的責任。「台灣的真相」美國人知道、中國人知道,只有台灣人不知道。