14. 二分查找

給定一個(gè)排序的整數(shù)數(shù)組(升序)和一個(gè)要查找的整數(shù)target,用O(logn)的時(shí)間查找到target第一次出現(xiàn)的下標(biāo)(從0開始),如果target不存在于數(shù)組中,返回-1。
如:在數(shù)組 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2。
思路:二分查找是基本功,可以寫迭代也可以寫while循環(huán),目前還是習(xí)慣寫while循環(huán)一些,但是這里的要求和一般的二分查找還不太一樣,主要的原因是題目要求查找出第一個(gè),也就是即使找到了一個(gè),也不能立即返回,需要找到第一個(gè)才行,我想了一下,有一個(gè)思路:找到了把結(jié)果賦值給一個(gè)變量,然后end更新為mid-1(因?yàn)榈谝粋€(gè)肯定比這個(gè)索引小,如果存在的話),一直把所有的二分查找都找完,返回最新的一個(gè)查找的結(jié)果就是要求的第一個(gè)的索引:

int binarySearch(vector<int> &array, int target) {
        auto beg=array.begin();
        auto end=array.end()-1;
        int res=-1;   //如果這個(gè)res最后還是-1的話,就說明沒有找到。
        while(beg<=end)
        {
            auto mid=beg+(end-beg)/2;
            if(*mid==target)
            {
            res=mid-array.begin();    //這里是找到了,但不能保證是第一個(gè)
            end=mid-1;    //mid仍然更新。
            }
            if(*mid<target)
            beg=mid+1;
            if(*mid>target)
            end=mid-1;
           
        }
        if(res!=-1)
        return res;
        // write your code here
        return -1;
    }

over

?著作權(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)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 描述 給定一個(gè)排序的整數(shù)數(shù)組(升序)和一個(gè)要查找的整數(shù)target,用O(logn)的時(shí)間查找到target,第一...
    6默默Welsh閱讀 316評(píng)論 0 0
  • 題目 描述 給定一個(gè)排序的整數(shù)數(shù)組(升序)和一個(gè)要查找的整數(shù)target,用O(logn)的時(shí)間查找到target...
    悠揚(yáng)前奏閱讀 265評(píng)論 0 0
  • 1 注意比較的時(shí)候比較的是值還是下標(biāo)2 startIndex>=endIndex,第一次寫成了<=3 數(shù)組中有多個(gè)...
    shenlong77閱讀 254評(píng)論 0 0
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對(duì)于byte類型而言...
    龍貓小爺閱讀 4,455評(píng)論 0 16
  • 開始 在項(xiàng)目中遇上了一個(gè)需要常駐后臺(tái)并且輪詢Http的需求(不上App Store),所以整理下后臺(tái)常駐的方式. ...
    oopp閱讀 1,819評(píng)論 10 6

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