Java二分法

DiligentCoder發表於2023-01-03

二分查詢題目

輸入一個 n 個元素升序的整型陣列 nums , 再輸入一個目標值 target  。 編寫一個方法: 使用二分法, 查詢 nums 中的 target, 如果target存在, 則返回在陣列中的下標, 否則返回 -1。

陣列上任意一點的值:nums[i]

二分法查詢流程

第一步

在陣列中,取得中間下標。 中間下標=(最大下標-最小下標)/2+最小下標

第二步

判斷中間下標的值和目標值target是否相等。

相等
直接返回中間下標
中間下標的值小於目標值target
縮小查詢範圍,將最小下標變為中間下標+1
中間下標的值大於目標值target
縮小查詢範圍,將最大的下標變為中間下標-1

程式碼示例

package com.binary;

public class Binary {
    //建立二分查詢的方法,入參1:nums、入參2:target
    public int search(int[] nums,int target){
        int low=0;
        int high=nums.length-1;
        while(low<=high){
            int mid=(high-low)/2+low;
            int num=nums[mid];
            if(num==target){
                return mid;
            } else if(num>target){
                high=mid-1;
            } else {
                low=mid+1;
            }

        }
        return -1;
    }

    public static void main(String[] args) {
        int[] nums={1,2,3,4,5};
        int target=2;
        int result=new Binary().search(nums,target);
        System.out.println("應該輸出的下標值為:1,實際輸出的下標值為:"+result);
    }
}

相關文章