【算法题】二分查找(折半查找)

是什么?(定义)

二分查找是一种常见的查找方法,又称折半查找。

两个要求:1、数列有序 2、数列要为顺序存储结构(如数组)


为什么使用?(优点)

查找速度快,时间复杂度为O(logn),远远比顺序查找(O(n))快。


在哪里使用?(使用场景)

判断一个目标值是否在有序数列内,并且可以得到索引值。

题:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

来源:力扣(LeetCode)704题
链接:https://leetcode-cn.com/problems/binary-search

如何使用?(解法)

1、基本思想

初始两个变量来定义查找的范围,第一次查找的范围是[0,数组.length-1]。

首先判断left是否大于right,如果left>right,那就表明在指定数组中没有找到target这个值,直接返回-1;如果left<=right,那就找到找到left和right的中间索引所对应的值,通过与target进行判断,如果中间值(nums[mid])===target,直接返回中间值索引(mid);如果中间值(nums[mid])>target,说明target的值应该在中间值的左边,我们将查找范围缩小到[0,mid-1];如果中间值(nums[mid])<target,说明target的值应该在中间值的右边,我们将查找范围缩小到[mid+1,right];通过while循环查找出target的索引。

2、代码实现

var search = function(nums, target) {
    var left = 0;
    var right = nums.length - 1;
    while (left <= right) {
        var mid = Math.floor((right - left) / 2) + left;
        if (nums[mid] === target) {
            return mid;
        } else if (nums[mid] > target) {
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return -1;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Dai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值