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

算法通關(guān)村——透徹理解二分查找

這篇具有很好參考價(jià)值的文章主要介紹了算法通關(guān)村——透徹理解二分查找。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 循環(huán)法

    public static int binarySearch(int[] arr, int low, int high, int target) {
        while (low <= high) {
            // 這樣寫(xiě)主要是避免溢出的情況,以及>>優(yōu)先級(jí)小于+,避免出現(xiàn)死循環(huán)
            int mid = low + ((high - low) >> 1);
            if (arr[mid] == target) {
                return mid;
            } else if (arr[mid] < target) {
                low = mid + 1;
            } else {
                high = mid - 1;
            }
        }
        return -1;
    }

2. 遞歸

    public static int binarySearch1(int[] array, int low, int high, int target) {
        if (low < high) {
            int mid = low + ((high - low) >> 1);
            if (array[mid] == target) {
                return mid;
            } else if (array[mid] > target) {
                return binarySearch(array, low, mid - 1, target);
            } else {
                return binarySearch(array, mid + 1, high, target);
            }
        }
        return -1;
    }

3. 元素中有重復(fù)的二分查找

假設(shè)現(xiàn)在有個(gè)數(shù)組里面有重復(fù)元素,并且按照增序排列,如果有相同元素,返回最左側(cè)的第一個(gè)重復(fù)元素的位置。

核心思路也是比較簡(jiǎn)單了,當(dāng)找到第一個(gè)重復(fù)的元素時(shí)候,記錄位置,然后向左移動(dòng),左邊的不是目標(biāo)元素,就意味著左邊沒(méi)有重復(fù)的目標(biāo)元素,然后+1就是目標(biāo)元素的位置文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-643569.html

 public static int search(int[] nums, int target) {
        if (nums == null || nums.length == 0)
            return -1;
        int low = 0;
        int high = nums.length - 1;
        while (low <= high) {
            int mid = low + ((high - low) >> 1);
            if (nums[mid] < target) {
                low = mid + 1;
            } else if (nums[mid] > target) {
                high = mid - 1;
            } else {
                // 找到了符合目標(biāo)元素的數(shù)據(jù)位置,然后一直往左遍歷,知道不是目標(biāo)元素或者索引為0的時(shí)候停止
                while (mid != 0 && nums[mid] == target) {
                    mid--;
                }
                if (mid == 0 && nums[mid] == target) {
                    return mid;
                }
                return mid + 1;
            }
        }
        return -1;
    }

到了這里,關(guān)于算法通關(guān)村——透徹理解二分查找的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(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)文章

  • 數(shù)據(jù)結(jié)構(gòu),查找算法(二分,分塊,哈希)

    一、查找算法 ? ? ? ? 1、二分查找:(前提條件: 必須有序的序列) 2、分塊查找:(塊間有序,塊內(nèi)無(wú)序) ? ? 索引表 ?+ ?源數(shù)據(jù)表 ? ? 思路: ? ? (1)先在索引表中確定在哪一塊中 ? ? (2)再遍歷這一塊進(jìn)行查找 //索引表 typedef ?struct? { ?? ?int max; //塊中最大值

    2024年02月11日
    瀏覽(28)
  • Python數(shù)據(jù)結(jié)構(gòu)與算法篇(五)-- 二分查找與二分答案

    Python數(shù)據(jù)結(jié)構(gòu)與算法篇(五)-- 二分查找與二分答案

    1.1 定義 ????????二分查找又稱(chēng)折半查找、二分搜索、折半搜索等,是一種在靜態(tài)查找表中查找特定元素的算法。 ????????所謂靜態(tài)查找表,即只能對(duì)表內(nèi)的元素做查找和讀取操作,不允許插入或刪除元素。 ????????使用二分查找算法,必須保證查找表中存放的是有

    2023年04月20日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)和算法之二分法查找

    二分法查找,也稱(chēng)作 二分查找 或 折半查找 ,是一種在有序數(shù)組中快速查找特定元素的算法。它采用分治法思想,通過(guò)將問(wèn)題劃分為規(guī)模更小的子問(wèn)題,并且通過(guò)對(duì)子問(wèn)題的查找來(lái)解決原問(wèn)題。 二分法查找的思路是不斷地將數(shù)組一分為二,然后判斷目標(biāo)值在哪一部分,進(jìn)而

    2024年02月09日
    瀏覽(31)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】python實(shí)現(xiàn)二分查找

    【數(shù)據(jù)結(jié)構(gòu)與算法】python實(shí)現(xiàn)二分查找

    二分查找 又稱(chēng)折半查找,它是一種效率較高的查找方法 原理:首先,假設(shè)表中元素是按升序排列,將表中間位置記錄的與查找比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個(gè)子表,如果中間位置記錄的大于查找,則

    2024年02月05日
    瀏覽(32)
  • Java【數(shù)據(jù)結(jié)構(gòu)】二分查找

    Java【數(shù)據(jù)結(jié)構(gòu)】二分查找

    ??在 有序 數(shù)組A中,查找目標(biāo)值target ??如果找到返回索引 ??如果找不到返回-1 算法描述 解釋 前提 給定一個(gè)內(nèi)含n個(gè)元素的有序數(shù)組A,滿(mǎn)足A0=A1=A2=·······=An-1,一個(gè)待查值target 1 設(shè)置left=0;right = n - 1 2 如果left right ,結(jié)束查找,沒(méi)找到 3 設(shè)置mid = (left + right )/2,mid為中間

    2024年02月12日
    瀏覽(30)
  • 數(shù)據(jù)結(jié)構(gòu)-查找(順序查找與二分查找的講解與代碼實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)-查找(順序查找與二分查找的講解與代碼實(shí)現(xiàn))

    順序查找概念:從表的另一端開(kāi)始,一次將記錄的和給定值進(jìn)行比較,若某個(gè)記錄的和給定的值相等,則查找成功,反之則查找失敗。 ASL:平均查找長(zhǎng)度 pi查找概率,ci查找次數(shù) eg:序列1,2,3 查找1的次數(shù)為1概率為1/3,2為兩次概率1/3,3的次數(shù)為3概率1/3? 將12

    2024年02月06日
    瀏覽(28)
  • 【手撕數(shù)據(jù)結(jié)構(gòu)】二分查找(好多細(xì)節(jié))

    ??鍵盤(pán)敲爛,年薪30萬(wàn)?? 目錄 普通版本的二分查找: right只負(fù)責(zé)控制邊界(少了兩次比較): 時(shí)間復(fù)雜度更穩(wěn)定的版本: BSLeftmost: BSRightmost: ? ??細(xì)節(jié)1:循環(huán)判定條件是left = right ?細(xì)節(jié)2:mid = (left + right ) 1 原因見(jiàn)代碼注釋 改動(dòng)1:while條件是left right 改動(dòng)2:right = nums.len

    2024年02月05日
    瀏覽(30)
  • 浙大數(shù)據(jù)結(jié)構(gòu)第一周01-復(fù)雜度3 二分查找

    本題要求實(shí)現(xiàn)二分查找算法。 函數(shù)接口定義: 其中 List 結(jié)構(gòu)定義如下: L 是用戶(hù)傳入的一個(gè)線(xiàn)性表,其中 ElementType 元素可以通過(guò)、==、進(jìn)行比較,并且題目保證傳入的數(shù)據(jù)是遞增有序的。函數(shù) BinarySearch 要查找 X 在 Data 中的位置,即數(shù)組下標(biāo)(注意:元素從下標(biāo)1開(kāi)始存儲(chǔ))

    2024年02月12日
    瀏覽(32)
  • 說(shuō)說(shuō)你對(duì)二分查找的理解?如何實(shí)現(xiàn)?應(yīng)用場(chǎng)景?

    說(shuō)說(shuō)你對(duì)二分查找的理解?如何實(shí)現(xiàn)?應(yīng)用場(chǎng)景?

    ? 在計(jì)算機(jī)科學(xué)中,二分查找算法,也稱(chēng)折半搜索算法,是一種在有序數(shù)組中查找某一特定元素的搜索算法 想要應(yīng)用二分查找法,則這一堆數(shù)應(yīng)有如下特性: 存儲(chǔ)在數(shù)組中 有序排序 搜索過(guò)程從數(shù)組的中間元素開(kāi)始,如果中間元素正好是要查找的元素,則搜索過(guò)程結(jié)束 如果

    2024年04月25日
    瀏覽(20)
  • 【算法系列篇】二分查找——這還是你所知道的二分查找算法嗎?

    【算法系列篇】二分查找——這還是你所知道的二分查找算法嗎?

    在生活中,我們往往會(huì)遇到在數(shù)組中查找某個(gè)確定的元素的時(shí)候,通常我們會(huì)選擇使用暴力解法,這樣雖然簡(jiǎn)單,但是時(shí)間復(fù)雜度是O(N),時(shí)間效率比較低。那么是否有方法可以使得在具有二段性的數(shù)組中找某一特定的元素的時(shí)間復(fù)雜度低于0(N)呢?答案是肯定的,當(dāng)我們可以

    2024年02月11日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包