国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

二分查找實(shí)例1(在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置)

這篇具有很好參考價(jià)值的文章主要介紹了二分查找實(shí)例1(在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

題目

給你一個(gè)按照非遞減順序排列的整數(shù)數(shù)組?nums,和一個(gè)目標(biāo)值?target。請(qǐng)你找出給定目標(biāo)值在數(shù)組中的開(kāi)始位置和結(jié)束位置。

如果數(shù)組中不存在目標(biāo)值?target,返回?[-1, -1]。

你必須設(shè)計(jì)并實(shí)現(xiàn)時(shí)間復(fù)雜度為?O(log n)?的算法解決此問(wèn)題。

示例 1:

輸入:nums = [5,7,7,8,8,10], target = 8
輸出:[3,4]

示例?2:

輸入:nums = [5,7,7,8,8,10], target = 6
輸出:[-1,-1]

示例 3:

輸入:nums = [], target = 0
輸出:[-1,-1]

提示:

  • 0 <= nums.length <= 105
  • -109?<= nums[i]?<= 109
  • nums?是一個(gè)非遞減數(shù)組
  • -109?<= target?<= 109

算法原理

二分查找的精髓是二段性,不管數(shù)組是否有序,只要數(shù)組存在二段性(即數(shù)組可以分成兩部分),那就可以使用二分查找

1 利用二分查找左端點(diǎn)

? ?假設(shè)要查找的左端點(diǎn)的值為t,t將整個(gè)數(shù)組分為兩部分:

? ?區(qū)間一內(nèi)的所有元素小于t? ?區(qū)間二內(nèi)的所有元素大于等于t

二分查找實(shí)例1(在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置),算法合集,算法

? ?假設(shè)每一次二分mid下標(biāo)對(duì)應(yīng)的值為x

? ?a 若是x<t? 則left = mid+1

? ?b 若是x>=t 則right = mid? (不能是mid+1,因?yàn)閙id可能就是最終答案,若是right=mid+1,那么即將檢索的區(qū)間內(nèi)沒(méi)有了答案)

2 一些細(xì)節(jié):

? ?a 循環(huán)條件:left<right

? ? ? 不能是left<=right 其一是因?yàn)楫?dāng)left==right時(shí)已經(jīng)有答案了,其二是會(huì)死循環(huán)

? ? ??二分查找實(shí)例1(在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置),算法合集,算法二分查找實(shí)例1(在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置),算法合集,算法

b 找中點(diǎn)操作:

? ?1 mid = left+(right-left)/2? 選擇這個(gè),當(dāng)區(qū)間元素?cái)?shù)為偶數(shù)時(shí),選擇左側(cè)的為中點(diǎn)

二分查找實(shí)例1(在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置),算法合集,算法

? ?2 mid = left+(right-left+1)/2? 不選這個(gè) 當(dāng)區(qū)間元素?cái)?shù)為偶數(shù)時(shí),選擇右側(cè)的為中點(diǎn)

? ?二分查找實(shí)例1(在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置),算法合集,算法

查找左端點(diǎn)時(shí),當(dāng)區(qū)間內(nèi)只剩下兩個(gè)元素時(shí)?,選擇1,則mid是前一個(gè)元素,那么無(wú)論是left=mid+1,還是right=mid ,left和right最終都會(huì)相等

而選擇2,mid是后一個(gè)元素,若是執(zhí)行right=mid,那么陷入死循環(huán)

3 利用二分查找右端點(diǎn)?

? ?a 若是x<=t 則left = mid(不能是mid+1,因?yàn)閙id可能是最終結(jié)果)

? ?b 若是x>t 則right = mid-1

二分查找實(shí)例1(在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置),算法合集,算法

c 循環(huán)條件:left<right

? ?求中點(diǎn):mid = left+(right-left+1)/2? left最終都會(huì)等于right?

? ? ? ? ? ? ? ? ?若是選擇?mid = left+(right-left)/2,當(dāng)執(zhí)行l(wèi)eft=mid時(shí),陷入死循環(huán)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-704621.html

代碼實(shí)現(xiàn):

class Solution 
{
public:
    vector<int> searchRange(vector<int>& nums, int target) 
    {
        if(nums.empty())//處理邊界情況
        {
            return {-1,-1};
        }
        //1 二分找左端點(diǎn)
        int left = 0;
        int right = nums.size()-1;
        while(left<right)
        {
            int mid = left+(right-left)/2;
            if(nums[mid]<target)
            {
                left = mid+1;
            }
            else 
            {
                right = mid;
            }
        }

        int begin = 0;
        if(nums[left]==target)
        {
            begin = left;
        }
        else 
        {
            return {-1,-1};
        }

        //2 二分找右端點(diǎn)
        left = 0;
        right = nums.size()-1;
        while(left<right)
        {
            int mid = left+(right-left+1)/2;
            if(nums[mid]<=target)
            {
                left = mid;
            }
            else 
            {
                right = mid-1;
            }
        }
        return {begin,left};
    }
};

到了這里,關(guān)于二分查找實(shí)例1(在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 84.在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置(力扣)

    84.在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置(力扣)

    目錄 問(wèn)題描述 代碼解決以及思想? 知識(shí)點(diǎn)? 初始化左邊界 left 為數(shù)組的起始位置(0),右邊界 right 為數(shù)組的結(jié)束位置( nums.size() - 1 )。 進(jìn)入一個(gè)循環(huán),只要左邊界 left 不大于右邊界 right ,就執(zhí)行以下操作: a. 計(jì)算中間位置 middle ,這是為了進(jìn)行二分查找,以避免整數(shù)溢

    2024年02月06日
    瀏覽(28)
  • 在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置——力扣34
  • 在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置(Java詳解)

    在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置(Java詳解)

    給你一個(gè)按照 非遞減 順序排列的整數(shù)數(shù)組? nums ,和一個(gè)目標(biāo)值? target 。請(qǐng)你找出給定目標(biāo)值在數(shù)組中的開(kāi)始位置和結(jié)束位置。 如果數(shù)組中不存在目標(biāo)值? target ,返回? [-1, -1] 。 你必須設(shè)計(jì)并實(shí)現(xiàn)時(shí)間復(fù)雜度為 ? O(log n) ?的算法解決此問(wèn)題。 示例: 輸入:nums = [5,7,7,8,8

    2024年02月03日
    瀏覽(28)
  • LeetCode 34 在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置

    在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置 給你一個(gè)按照非遞減順序排列的整數(shù)數(shù)組 nums ,和一個(gè)目標(biāo)值 target 。請(qǐng)你找出給定目標(biāo)值在數(shù)組中的開(kāi)始位置和結(jié)束位置。 如果數(shù)組中不存在目標(biāo)值 target ,返回 [-1, -1] 。 你必須設(shè)計(jì)并實(shí)現(xiàn)時(shí)間復(fù)雜度為 O(log n) 的算法解決此

    2024年02月02日
    瀏覽(25)
  • 【算法Hot100系列】在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置

    【算法Hot100系列】在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置

    ??????歡迎來(lái)到我的博客,很高興能夠在這里和您見(jiàn)面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識(shí),也可以暢所欲言、分享您的想法和見(jiàn)解。 推薦:kwan 的首頁(yè),持續(xù)學(xué)習(xí),不斷總結(jié),共同進(jìn)步,活到老學(xué)到老 導(dǎo)航 檀越劍指大廠系列:全面總

    2024年02月02日
    瀏覽(28)
  • 「優(yōu)選算法刷題」:在排序數(shù)組中查找元素的第一個(gè)和最后個(gè)位置

    「優(yōu)選算法刷題」:在排序數(shù)組中查找元素的第一個(gè)和最后個(gè)位置

    給你一個(gè)按照非遞減順序排列的整數(shù)數(shù)組? nums ,和一個(gè)目標(biāo)值? target 。請(qǐng)你找出給定目標(biāo)值在數(shù)組中的開(kāi)始位置和結(jié)束位置。 如果數(shù)組中不存在目標(biāo)值? target ,返回? [-1, -1] 。 你必須設(shè)計(jì)并實(shí)現(xiàn)時(shí)間復(fù)雜度為? O(log n) ?的算法解決此問(wèn)題。 示例 1: 示例?2: 示例 3: 二分

    2024年01月22日
    瀏覽(23)
  • 【LeetCode】每日一題&&兩數(shù)之和&&尋找正序數(shù)組的中位數(shù)&&找出字符串中第一個(gè)匹配項(xiàng)的下標(biāo)&&在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置

    【LeetCode】每日一題&&兩數(shù)之和&&尋找正序數(shù)組的中位數(shù)&&找出字符串中第一個(gè)匹配項(xiàng)的下標(biāo)&&在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置

    ========================================================================= 主頁(yè)點(diǎn)擊直達(dá): 個(gè)人主頁(yè) 我的小倉(cāng)庫(kù): 代碼倉(cāng)庫(kù) C語(yǔ)言偷著笑: C語(yǔ)言專(zhuān)欄 數(shù)據(jù)結(jié)構(gòu)挨打小記: 初階數(shù)據(jù)結(jié)構(gòu)專(zhuān)欄 Linux被操作記: Linux專(zhuān)欄 LeetCode刷題掉發(fā)記: LeetCode刷題 算法: 算法專(zhuān)欄? C++頭疼記: C++專(zhuān)欄 計(jì)算機(jī)

    2024年02月08日
    瀏覽(36)
  • [二分查找]LeetCode2040:兩個(gè)有序數(shù)組的第 K 小乘積

    [二分查找]LeetCode2040:兩個(gè)有序數(shù)組的第 K 小乘積

    二分查找算法合集 給你兩個(gè) 從小到大排好序 且下標(biāo)從 0 開(kāi)始的整數(shù)數(shù)組 nums1 和 nums2 以及一個(gè)整數(shù) k ,請(qǐng)你返回第 k (從 1 開(kāi)始編號(hào))小的 nums1[i] * nums2[j] 的乘積,其中 0 = i nums1.length 且 0 = j nums2.length 。 示例 1: 輸入:nums1 = [2,5], nums2 = [3,4], k = 2 輸出:8 解釋?zhuān)旱?2 小的乘

    2024年02月04日
    瀏覽(29)
  • C++二分查找算法:有序矩陣中的第 k 個(gè)最小數(shù)組和

    C++二分查找算法:有序矩陣中的第 k 個(gè)最小數(shù)組和

    二分查找算法合集 C++二分查找算法:查找和最小的 K 對(duì)數(shù)字 十分接近m恒等于2 給你一個(gè) m * n 的矩陣 mat,以及一個(gè)整數(shù) k ,矩陣中的每一行都以非遞減的順序排列。 你可以從每一行中選出 1 個(gè)元素形成一個(gè)數(shù)組。返回所有可能數(shù)組中的第 k 個(gè) 最小 數(shù)組和。 示例 1: 輸入:

    2024年02月05日
    瀏覽(23)
  • 【算法訓(xùn)練-數(shù)組 五】【二分查找】:旋轉(zhuǎn)排序數(shù)組的最小數(shù)字、旋轉(zhuǎn)排序數(shù)組的指定數(shù)字

    【算法訓(xùn)練-數(shù)組 五】【二分查找】:旋轉(zhuǎn)排序數(shù)組的最小數(shù)字、旋轉(zhuǎn)排序數(shù)組的指定數(shù)字

    廢話(huà)不多說(shuō),喊一句號(hào)子鼓勵(lì)自己:程序員永不失業(yè),程序員走向架構(gòu)!本篇Blog的主題是【數(shù)組的二分查找】,使用【數(shù)組】這個(gè)基本的數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn),這個(gè)高頻題的站點(diǎn)是: CodeTop ,篩選條件為: 目標(biāo)公司+最近一年+出現(xiàn)頻率排序 ,由高到低的去 ??蚑OP101 去找,只有兩

    2024年02月09日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包