C/C++ BM17 二分查找-I

文章目录

  • 前言
  • 题目
  • 解决方案一
    • 1.1 思路阐述
    • 1.2 源码
  • 总结

前言

一篇简单的二分查找的运用


题目

描述
请实现无重复数字的升序数组的二分查找

给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1

数据范围: 0 ≤ l e n ( n u m s ) ≤ 2 × 1 0 5 0≤len(nums)≤2×10^5 0len(nums)2×105 , 数组中任意值满足 ∣ v a l ∣ ≤ 1 0 9 ∣val∣≤10^9 val∣≤109
进阶:时间复杂度 O ( l o g ⁡ n ) O(log⁡n) O(logn) ,空间复杂度 O ( 1 ) O(1) O(1)

示例1
输入: [ − 1 , 0 , 3 , 4 , 6 , 10 , 13 , 14 ] , 13 [-1,0,3,4,6,10,13,14],13 [1,0,3,4,6,10,13,14],13
返回值: 6 6 6
说明:13 出现在nums中并且下标为 6

示例2
输入: [ ] , 3 [],3 [],3
返回值: − 1 -1 1
说明:nums为空,返回-1

示例3
输入: [ − 1 , 0 , 3 , 4 , 6 , 10 , 13 , 14 ] , 2 [-1,0,3,4,6,10,13,14],2 [1,0,3,4,6,10,13,14],2
返回值: − 1 -1 1
说明:2 不存在nums中因此返回 -1

解决方案一

1.1 思路阐述

这里阐述一下二分查找的算法思想:

对于一个给定的从小到大的排序好的序列0~9。我要查找一个target值为2的值。

需要用到三个索引,前中后(i,mid,j);它们分别指向,序列的第一个,中间位以及最后一位

每次用中间位索引所指的数值和target比较。如果target小于mid所指值则从mid左边的区间开始找,这时候需要调整一下几个索引的位置,i不变,j变为原来mid的前一个,mid介于i和j之间。如果target大于mid,则找mid右边的区间。

如果存在,则一定会找到。时间复杂度为 O ( l o g 2 ( n ) ) O(log_2(n)) O(log2(n))

1.2 源码

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型vector * @param target int整型 * @return int整型*/int search(vector<int>& nums, int target) {// write code hereint i=0;int j=nums.size()-1;while (i<=j) {int m=i+(j-i)/2;if (nums[m]<target) {i=++m;continue;}if (nums[m]>target) {j=--m;continue;}if (nums[m]==target) {return m;}}return -1;}
};

总结

简单回顾一下二分查找,注意二分查找的对象,一般是有序数列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux进一步研究权限-----------ACL使用

一、使用情况 1.1、场景: 某个大公司&#xff0c;在一个部门&#xff0c;有一个经理和手下有两个员工&#xff0c;在操控一个Linux项目,项目又分为三期做&#xff0c;然而一期比较重要&#xff0c;经理带着员工做完了&#xff0c;公司就觉得技术难点已经做完攻克了&#xff0…

【自然语言处理-二-attention注意力 是什么】

自然语言处理二-attention 注意力机制 自然语言处理二-attention 注意力记忆能力回顾下RNN&#xff08;也包括LSTM GRU&#xff09;解决memory问题改进后基于attention注意力的modelmatch操作softmax操作softmax值与hidder layer的值做weight sum 计算和将计算出来的和作为memo…

《Python 语音转换简易速速上手小册》第1章 Python语音处理概述(2024 最新版)

文章目录 1.1 语音处理的基础1.1.1 基础知识1.1.2 主要案例:自动语音识别系统案例介绍案例 Demo案例分析1.1.3 扩展案例 1:智能虚拟助手案例介绍案例 Demo案例分析1.1.4 扩展案例 2:情感分析系统案例介绍案例 Demo

NATS学习笔记(一)

NATS是什么&#xff1f; NATS是一个开源的、轻量级、高性能的消息传递系统&#xff0c;它基于发布/订阅模式&#xff0c;由Apcera公司开发和维护。 NATS的功能 发布/订阅&#xff1a;NATS的核心是一个发布/订阅消息传递系统&#xff0c;允许消息生产者发布消息到特定的主题…

.Net 8.0 新的变化

.NET 8 是微软于2021年8月24日宣布的下一代编程语言和框架&#xff0c;它是 .NET 宇宙的一部分&#xff0c;与 C# (Common Language Infrastructure) 紧密集成。.NET 8 引入了许多新功能&#xff0c;如原生编译、值类型 (Value Types)、结构化并发 (structured concurrency) 和…

2024生物发酵魅力展示会-光德流体

参展企业介绍 河北光德流体控制有限公司始建于1996年&#xff0c;是一家从事以不锈钢为母材的洁净应用材料研发与专业制造的实体企业。产品主要包括卫生级球阀&#xff0c;隔膜阀&#xff0c;蝶阀等&#xff0c;并广泛应用于生物发酵&#xff0c;医疗制药&#xff0c;食品饮料…

初识51单片机

##江科大51单片机学习 什么是单片机&#xff1f;&#xff1f;&#xff1f; 单片机&#xff0c;英文名&#xff0c;Micro Controller Unit&#xff0c;简称MCU&#xff08;tips&#xff1a;有人会简称它为CPU&#xff0c;但不是如此&#xff0c;CPU其实被集成在MCU中&#xff…

【Elasticsearch专栏 11】深入探索:Elasticsearch如何支持多租户架构

文章目录 Elasticsearch如何支持多租户架构&#xff1f;01 隔离方式1 索引隔离2 集群隔离3 基于路由的隔离 02 配置示例1.索引隔离配置2.基于路由的隔离配置 03 实现原理04 权限控制1.定义角色2.分配用户角色 05 安全性考虑06 总结 Elasticsearch如何支持多租户架构&#xff1f…

【python】使用OpenCV进行行人检测

请确保在运行代码之前已经安装了 OpenCV 库&#xff0c;可以使用以下命令来安装&#xff1a; pip install opencv-python4.2.0.32 使用 OpenCV 中的 HOG 特征和默认的行人检测器来检测指定文件夹 "images" 中的图像中是否有行人&#xff0c;并将检测到行人的原始图…

视频评论抓取软件|抖音数据抓取工具

最近我们推出了一款基于C#语言开发的工具。这款工具提供了丰富的功能&#xff0c;旨在帮助用户轻松获取抖音视频内容。让我们一起来详细介绍一下这款工具的主要功能模块&#xff1a; 1. 批量视频提取&#xff1a; 工具提供了便捷的批量视频提取功能&#xff0c;用户只需输入关…

vue3 多层级组件传值

1. 传统方式&#xff1a;父组件通过Props将值逐级传递给要接受的子组件 // 父组件<child :data"list"></child><script lang"ts" setup> import { reactive, toRefs} from vue; const state reactive({list:[] })const { list} toRe…

第3部分 原理篇2去中心化数字身份标识符(DID)(3)

3.2.2.4. DID文档 (DID Document) 本聪老师&#xff1a;DID标识符和DID URL还都只是ID&#xff0c;必须为它附加一个基本属性才可以证明是该主体独有的。这个就是我们下面介绍的DID文档。 本聪老师&#xff1a;每个DID标识符都唯一对应一个DID文档&#xff0c;也可以说&#x…

潇洒郎:2024 IDEA、Pycharm获取最新激活码获取方式

IDEA获取最新激活码 https://idea.javatiku.cn/ 手机打开&#xff0c;看到验证码&#xff0c;30分钟有效&#xff0c;输入验证码 获取到最新激活码

node 第二十五天 基于 node 的 mongodb 数据库驱动程序 mongoose

什么是mongoose MongoDB object modeling designed to work in an asynchronous environment. MongoDB对象建模设计用于在异步环境中工作。 其实就是基于Node/Deno 的数据库驱动程序, 一句话类比就是: Navicat是基于windows/macOS/Linux 操作系统环境 操作mongodb数据库的 程序…

Redis(十六)缓存预热+缓存雪崩+缓存击穿+缓存穿透

文章目录 面试题缓存预热缓存雪崩解决方案 缓存穿透解决方案 缓存击穿解决方案案例&#xff1a;高并发聚划算业务 总结表格 面试题 缓存预热、雪崩、穿透、击穿分别是什么?你遇到过那几个情况?缓存预热你是怎么做的?如何避免或者减少缓存雪崩?穿透和击穿有什么区别?他两是…

Go 1.22 中的 for 循环新特性详解

目录 每次迭代都创建新变量 支持整数类型循环 小结 在 Go 语言中&#xff0c;for 循环是实现迭代的主要方式。Go 中的 for 循环非常灵活&#xff0c;有多种使用方式&#xff0c;包括传统的三部分 for 循环、类似于其他语言中的 while 循环以及迭代集合的 range 循环。 在 1…

基于大数据的智能家居销量数据分析

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

[HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

HTTP概要

文章目录 什么是HTTP?URL的结构请求报文结构请求方法GETHEADPOSTPUTDELETETRACEOPTIONSCONNECTPATCH解释 请求头字段 响应报文结构响应状态响应头字段 HTTP会话3次握手无状态协议 什么是HTTP? HTTP&#xff0c;即Hypertext Transfer Protocol(超文本传输协议) 它是一个”请…

Linux——简单的Shell程序

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、Shell程序思路二、Shell代码展示 一、Shell程序思路 用下图的时间轴来表示事件的发生次序…