刷题之二分查找

2023-11-14

题目

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

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

入门阶段自然会想到循环遍历获得对应的索引值,但是所耗费的时间内存都较大。根据题目,给定的是一个升序的(有序的)数组,故很容易便能想到二分查找。

        这是普通的循环遍历

class Solution {
    public int search(int[] nums, int target) {
        int i =0;
        while(i<nums.length){
            if(target==nums[i]){
                return i;
            }else{
                i++;
            }

        }
        return -1;
    }
}

        二分法如下:

class Solution {
    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){
                low=mid+1;
            }else{
                high=mid-1;
            }       
        }
        return -1;
    }
}

可以看出用时很少。

二分法的原理

在有序数组中使用二分查找,定义查找的范围【low,high】,初始查找是整个数组,每次获取到范围的中点与目标值作比较,如果相等则找到目标,如果目标值大于中点,那么目标值在中点的右侧(假设为升序,倒序在左边)那么重新划定范围【mid+1,high】

mid=(high-low)/2 +low

每次查找都会将范围减半,因此二分查找的时间复杂度是 O(logn),其中 n 是数组的长度。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

刷题之二分查找 的相关文章

随机推荐

  • 使用kubebuilder结合code-generator开发k8s controller(1)

    为了开了controller 先后分析和尝试了几周 现把步骤和踩的坑记录分享一下 使用kubebuilder结合code generator开发k8s controller 1 使用kubebuilder结合code generator开发
  • 查看matlab中函数源代码的方法

    有几种方法可以实现查看matlab里自带函数的源代码 在命令窗口中输入 1 type 函数名 如 type rgb2gray 或者 type rgb2gray m 即可在命令窗口中显示此函数的源代码 2 open 函数名 如 open rg
  • 数据结构与算法--用c语言建立顺序表以及其相关操作

    一 线性表的介绍 线性表分为顺序表和单链表 线性表是数据结构最基础的结构之一 他们与栈 队列 串和数组都属于线性结构 由n个 n gt 0 个数据特性相同的元素构成的有限序列称为线性表 n称为线性表的长度 n 0时称为空表 对于非空的线性表
  • (UE4 4.20 ) UE4的Actor生命周期(1) 之 SpawnActor , SpawnActorDeferred 产生 Actor 和 AActor 初始化的执行流程

    在https docs unrealengine com en us Programming UnrealArchitecture Actors ActorLifecycle 官方的编程文档中 UE4官方给出了有关Actor生命周期的宝贵资
  • 如何用Python写一个爬虫

    在当今的互联网时代 网络爬虫已经成为了一种非常重要的技术手段 通过爬虫 我们可以快速地获取大量的数据并进行分析 这对于很多行业都非常有帮助 在本篇文章中 我们将详细介绍如何用Python写一个爬虫 1 爬虫的基本原理 在开始编写爬虫之前 我
  • C++类属(泛型)——模板详解

    第八章 类属 泛型 模板 1 概述 在程序设计中经常会用到这样的一些程序实体 这些程序实体的实现和所完成的基本功能相同 不同的地方仅在于它们所涉及的数据类型不同 对于这些函数或类 如果能分别只用一个函数和一个类来描述它们 将会大大简化程序设
  • 设置openEuler(欧拉系统)安装源

    在安装openEuler时 完整的 ISO映像 使用的是ISO的源一般不用设置安装源 安装netinst版需要连网下载文件 所以需要设置安装源 下面将按照提示一步步配置 先设置网络连网 然后点完成 选择硬盘 默认自动分区 添加安装源 官方列
  • 使用MicroPython制作红绿灯模拟器

    我们将使用行人步行按钮实现交通信号灯 该项目与LED配合使用 这使我们能够在代码执行时看到其状态 对于交通信号灯 也称为刹车灯 我们将使用红色 黄色和绿色的LED来匹配交通信号灯上的相同颜色的灯 我们还将使用红色和黄色的LED来表示 请勿行
  • vue+openlayers实现地图打点

    前言 openlayers的使用 一 使用步骤 1 引入库 代码如下 示例 npm install ol import ol ol css 样式 import Map from ol Map 地图对象 import Feature from
  • sed:当替换内容存在变量

    sed命令使用变量三种方式 1 使用单引号 变量处使用单引号 双引号把变量包括起来 sed i s eco ori g block vf 2 使用双引号 变量直接引用即可 sed i s eco ori g block vf 3 使用单引号
  • Nacos使用教程

    Spring Cloud是一个基于Spring Boot的微服务框架 它提供了一系列的组件和工具 可以帮助开发人员快速构建和部署分布式应用程序 其中 Nacos是一个新兴的服务发现和配置管理组件 可以帮助开发人员轻松地管理微服务的注册 发现
  • dbeaver问题:Public Key Retrieval is not allowed

    1 问题描述 连接数据库时出现错误 Public Key Retrieval is not allowed 2 解决方案 编辑连接信息 设置驱动属性为true 刷新一下
  • 1流明等于多少lux_说说投影仪ANSI亮度和流明的区别

    作为一个投影行业从业者 对于现在市面上的LED光源小微投动不动多少多少ANSI亮度 多少多少光源亮度 实在是看不下去了 不忍看到大家再被一些无良厂商忽悠 先说说现在市面上大家在标的ANSI亮度 ANSI是一个9点测量方法 即投出画面 画面大
  • 实现内网https 内网部署https SpringBoot

    最近项目中要在内网中部署https网址 之前对https完全不了解 一脸懵逼 好在在一顿疯狂必应之后 成功完成了部署 首先需要明确的是 由于是在内网部署 所以完全不需要搞得那么复杂 宝塔啊 申请域名啊什么的 零 前置条件 在本地安装好jdk
  • go 进阶 三方库之 jwt-go

    目录 一 JWT 基础解释 二 JWT Token 组成 三 jwt go 使用示例 一 JWT 基础解释 先了解几个问题 JSON数据使用base64url编码 只对JSON数据是先扁平化处理再用64个可读无冲突字符来表达 没有加密效果
  • 多线程是可以同时读取同一个内存数据的

    记录一下 多线程如果只是读取同一块内存区域的数据 没必要设置成同步线程 线程同步的目的是为了防止同一时间多个线程要修改数据 造成数据错误 所以 如果线程只是访问 完全没必要线程同步
  • C语言 从键盘上依次输入20个数据,输出最大值和最小值,并统计正数和负数的个数。

    C语言 从键盘上依次输入20个数据 输出最大值和最小值 并统计正数和负数的个数 代码 include
  • nvm的介绍和常用命令

    一 介绍 nvm Node Version Manager 是一个用于管理多个Node js版本的工具 它允许你在同一台机器上安装和切换不同的Node js版本 以下是nvm的一些详细介绍 安装和配置 你可以从nvm的GitHub仓库中下载
  • 数据分析和可视化平台:Splunk Enterprise for mac v9.1.1激活版 兼容m1

    Splunk Enterprise 是一个数据分析和可视化平台 可帮助企业理解其数据 虽然没有适用于 Mac OS 的 Splunk Enterprise 官方版本 但他们确实为 Mac OS 提供了一个名为 Splunk Light 的应
  • 刷题之二分查找

    题目 给定一个 n 个元素有序的 升序 整型数组 nums 和一个目标值 target 写一个函数搜索 nums 中的 target 如果目标值存在返回下标 否则返回 1 来源 力扣 LeetCode 链接 https leetcode c