欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

圖解Java經(jīng)典算法折半查找的原理與實(shí)現(xiàn)

 更新時(shí)間:2022年09月10日 09:45:33   作者:Binaire-沐辰  
折半查找法也叫做?分查找,顧名思義就是把數(shù)據(jù)分成兩半,再判斷所查找的key在哪?半中,再重復(fù)上述步驟知道找到?標(biāo)key,下面這篇文章主要介紹了圖解Java經(jīng)典算法折半查找的原理與實(shí)現(xiàn)

二分查找

二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法,可以在數(shù)據(jù)規(guī)模的對(duì)數(shù)時(shí)間復(fù)雜度內(nèi)完成查找。是一種在有序數(shù)組中查找某一特定元素的搜索算法。

算法思路

以升序數(shù)列為例,比較目標(biāo)元素與數(shù)列中間位置的元素的大小,如果目標(biāo)元素比中間位置的元素大,則繼續(xù)在數(shù)列的后半部分中進(jìn)行二分查找;如果目標(biāo)元素比中間位置的元素小,則在數(shù)列的前半部分進(jìn)行比較;如果相等,則找到了元素的位置。每次比較的數(shù)列長度都會(huì)是之前數(shù)列的一半,直到找到相等元素的位置或者最終沒有找到目標(biāo)元素。

圖解

給定一個(gè)有序的升序排列的數(shù)組 nums=[-1,0,2,5,8,12,18,38,43,46]

然后在該數(shù)組中找到目標(biāo)值 target = 12。

圖解如下:

力扣原題

傳送門

題目描述:

給定一個(gè) n 個(gè)元素有序的(升序)整型數(shù)組 nums 和一個(gè)目標(biāo)值 target ,寫一個(gè)函數(shù)搜索 nums 中的 target,如果目標(biāo)值存在返回下標(biāo),否則返回 -1。

示例 1:

輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現(xiàn)在 nums 中并且下標(biāo)為 4

示例 2:

輸入: nums = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不存在 nums 中因此返回 -1

解題思路:

根據(jù)題意得出該數(shù)組為有序數(shù)組,這也是使用二分查找的前提條件。

  • 定義兩個(gè)指針分別指向數(shù)組的首尾兩個(gè)元素;
  • 找到數(shù)組的中間值mid;
  • 如果nums[mid] < target,則 target 位于數(shù)組的后半部分,反之nums[mid] > target在前半部分;
  • 重復(fù)上一步操作,直到nums[mid] = target,說明找到target,返回下標(biāo)即可。

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

class Solution {
    public int search(int[] nums, int target) {
        int left = 0,right = nums.length - 1;
        while(left <= right) { // 循環(huán)條件
            int mid = left + (right - left) / 2;
            if(nums[mid] == target){
                return mid;
            } else if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1;  // 找不到則返回-1
    }
}

復(fù)雜度分析:

  • 時(shí)間復(fù)雜度:O(logn),其中 n 是數(shù)組的長度。
  • 空間復(fù)雜度:O(1)。

到此這篇關(guān)于圖解Java經(jīng)典算法折半查找的原理與實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java折半查找內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RocketMQ消費(fèi)冪概念與使用分析

    RocketMQ消費(fèi)冪概念與使用分析

    如果有?個(gè)操作,多次執(zhí)?與?次執(zhí)?所產(chǎn)?的影響是相同的,我們就稱這個(gè)操作是冪等的。當(dāng)出現(xiàn)消費(fèi)者對(duì)某條消息重復(fù)消費(fèi)的情況時(shí),重復(fù)消費(fèi)的結(jié)果與消費(fèi)?次的結(jié)果是相同的,并且多次消費(fèi)并未對(duì)業(yè)務(wù)系統(tǒng)產(chǎn)?任何負(fù)?影響,那么這整個(gè)過程就可實(shí)現(xiàn)消息冪等
    2023-02-02
  • java 中模擬UDP傳輸?shù)陌l(fā)送端和接收端實(shí)例詳解

    java 中模擬UDP傳輸?shù)陌l(fā)送端和接收端實(shí)例詳解

    這篇文章主要介紹了java 中模擬UDP傳輸?shù)陌l(fā)送端和接收端實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • java 中歸并排序算法詳解

    java 中歸并排序算法詳解

    這篇文章主要介紹了java 中歸并排序算法詳解的相關(guān)資料,歸并排序算法又稱為合并排序算法,是一種時(shí)間復(fù)雜度為O(N logN)的排序算法,因而其在平常生活工作中應(yīng)用非常廣泛,需要的朋友可以參考下
    2017-09-09
  • eclipse導(dǎo)入工程報(bào)錯(cuò)問題項(xiàng)目或者文件有紅叉的解決方案

    eclipse導(dǎo)入工程報(bào)錯(cuò)問題項(xiàng)目或者文件有紅叉的解決方案

    這篇文章主要介紹了eclipse導(dǎo)入工程報(bào)錯(cuò)問題項(xiàng)目或者文件有紅叉的解決方案,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java使用WatchService監(jiān)控文件內(nèi)容變化的示例

    Java使用WatchService監(jiān)控文件內(nèi)容變化的示例

    本篇文章主要介紹了Java使用WatchService監(jiān)控文件變化的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-10-10
  • 帶你了解10道java入門面試題

    帶你了解10道java入門面試題

    面試題相信大家都不陌生,想要一個(gè)好的工作面試題必不可少的,下面和小編一起來學(xué)習(xí)與了解Java當(dāng)中有有些什么面試題吧,希望能給你帶來幫助
    2021-08-08
  • Java中的String不可變性實(shí)現(xiàn)

    Java中的String不可變性實(shí)現(xiàn)

    在Java編程中,String類的不可變性是一個(gè)被廣泛討論和利用的特性,本文主要介紹了Java中的String不可變性實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Spring基于注解讀取外部配置文件

    Spring基于注解讀取外部配置文件

    這篇文章主要介紹了Spring基于注解讀取外部配置文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • C# TreeNode案例詳解

    C# TreeNode案例詳解

    這篇文章主要介紹了C# TreeNode案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解Maven optional關(guān)鍵字透徹圖解

    詳解Maven optional關(guān)鍵字透徹圖解

    這篇文章主要介紹了詳解Maven optional關(guān)鍵字透徹圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評(píng)論