算法记录:二分查找

二分查找

给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。

样例

样例 1:

输入:[1,4,4,5,7,7,8,9,9,10]1
输出: 0
样例解释: 
第一次出现在第0个位置。

样例 2:

输入: [1, 2, 3, 3, 4, 5, 10]3
输出: 2
样例解释: 
第一次出现在第2个位置

样例 3:

输入: [1, 2, 3, 3, 4, 5, 10]6
输出: -1
样例解释: 
没有出现过6, 返回-1

算法实现

基本二分查找法

  1. 判断数组是否为空,为空直接返回-1。
  2. 定义start,end,并且初始化。
  3. 二分查找,关键start+1<end循环结束条件。
  4. 循环结束,单独判断start和end位置的值。
package com.company;

public class BinarySearch {
    public static int binarySearch(int[] nums, int target) {
        // write your code here
        //1. 判断数组是否为空,为空直接返回-1。
        if (nums==null||nums.length == 0 ) {
            return -1;
        }
        //2. 定义start,end,并且初始化。
        int start = 0;
        int end = nums.length-1;
        //3. 二分查找,关键start+1<end循环结束条件。
        while(start+1<end){
            int mid = start+(end-start)/2;
            if (nums[mid] == target) {
                return  mid;
            }else if(nums[mid]<target){
                start = mid;
            }else{
                end = mid;
            }
        }
        //4. 循环结束,单独判断start和end位置的值。
        if(nums[start]==target){
            return start;
        }
        if(nums[end]==target){
            return end;
        }
        return -1;
    }
    public static void main(String[] args) {
	// write your code here
        int[] array  = new int[]{1,4,4,5,7,7,8,9,9,10};
        int result = binarySearch(array,4);
        System.out.println(result);
    }
}

输出结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值