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

圖解Java經典算法折半查找的原理與實現

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

二分查找

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

算法思路

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

圖解

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

然后在該數組中找到目標值 target = 12。

圖解如下:

力扣原題

傳送門

題目描述:

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

示例 1:

輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現在 nums 中并且下標為 4

示例 2:

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

解題思路:

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

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

Java代碼實現:

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
    }
}

復雜度分析:

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

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

相關文章

  • RocketMQ消費冪概念與使用分析

    RocketMQ消費冪概念與使用分析

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

    java 中模擬UDP傳輸的發(fā)送端和接收端實例詳解

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

    java 中歸并排序算法詳解

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

    eclipse導入工程報錯問題項目或者文件有紅叉的解決方案

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

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

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

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

    面試題相信大家都不陌生,想要一個好的工作面試題必不可少的,下面和小編一起來學習與了解Java當中有有些什么面試題吧,希望能給你帶來幫助
    2021-08-08
  • Java中的String不可變性實現

    Java中的String不可變性實現

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

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

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

    C# TreeNode案例詳解

    這篇文章主要介紹了C# TreeNode案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • 詳解Maven optional關鍵字透徹圖解

    詳解Maven optional關鍵字透徹圖解

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

最新評論