二分查找三種模板

leetcode 35 題

給定一個(gè)排序數(shù)組和一個(gè)目標(biāo)值,在數(shù)組中找到目標(biāo)值,并返回其索引。如果目標(biāo)值不存在于數(shù)組中,返回它將會(huì)被按順序插入的位置。
你可以假設(shè)數(shù)組中無(wú)重復(fù)元素。

示例 1:
輸入: [1,3,5,6], 5
輸出: 2
示例 2:
輸入: [1,3,5,6], 2
輸出: 1
示例 3:
輸入: [1,3,5,6], 7
輸出: 4

模板 1:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
   // 比較第一個(gè)和最后一個(gè)
   if(nums[0] > target) {
       return 0;
   }
   if(nums[nums.length - 1] < target) {
       return nums.length;
   }

   // 需要查找
   var left = 0;
   var right = nums.length;
   while(left < right) {
       var mid = Math.floor((left + right)/2);
       if(nums[mid] === target) {
           return mid;
       }
       if(nums[mid] > target) {
           // 向左查找
           right = mid - 1;
       } else {
           // 向右查找
           left = mid + 1;
       }
       // 最后一次查找情況:(left === right === mid) 
       // 如果不符合條件則會(huì)變?yōu)?left > right 循環(huán)中止
   }
   // 循環(huán)中止后考慮情況
    return left;
};

模板 2:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
   // 比較第一個(gè)和最后一個(gè)
   if(nums[0] > target) {
       return 0;
   }
   if(nums[nums.length - 1] < target) {
       return nums.length;
   }

   // 需要查找
   var left = 0;
   var right = nums.length;
   while(left < right) {
       var mid = Math.floor((left + right)/2);
       if(nums[mid] === target) {
           return mid;
       }
       if(nums[mid] > target) {
           // 向左查找
           right = mid;
       } else {
           // 向右查找
           left = mid + 1;
       }
       // 最終一次查找情況:(left < right 并相鄰, mid === left) 
       // 如果不符合條件則會(huì)變?yōu)?left === right 循環(huán)中止
   }
   // 循環(huán)中止后考慮情況
    return left;
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 二分查找法 說(shuō)明:二分查找法在代碼實(shí)現(xiàn)上有模板方法,一定要掌握。 1、二分查找法的使用前提:數(shù)組一定要是排好序的,...
    李威威閱讀 767評(píng)論 0 1
  • 二分查找 前言 說(shuō)到二分查找很多人都是耳熟能詳,這個(gè)算法基本是每個(gè)工科生(不僅僅是計(jì)算機(jī)相關(guān)專(zhuān)業(yè))的必備知識(shí)點(diǎn),在...
    佛西先森閱讀 1,172評(píng)論 0 1
  • 簡(jiǎn)介 二分查找是一種在每次比較之后將查找空間一分為二的算法。二分查找的最大特點(diǎn)是:思路簡(jiǎn)單,實(shí)現(xiàn)很難。其原因是二分...
    腐爛的橘子閱讀 1,130評(píng)論 0 1
  • 店小二:掌柜的,您進(jìn)貨回來(lái)了呀,喲!今天您買(mǎi)這魚(yú)挺大呀!袁廚:那是,這是我今天從咱們江邊買(mǎi)的,之前一直去菜市場(chǎng)買(mǎi),...
    KB_MORE閱讀 642評(píng)論 0 1
  • 推薦指數(shù): 6.0 書(shū)籍主旨關(guān)鍵詞:特權(quán)、焦點(diǎn)、注意力、語(yǔ)言聯(lián)想、情景聯(lián)想 觀(guān)點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析,社會(huì)...
    Jenaral閱讀 6,038評(píng)論 0 5

友情鏈接更多精彩內(nèi)容