二分查找(Binary Search)是一种高效的查找算法,适用于 有序数组 或 有序列表。它的基本思想是通过将搜索范围逐渐缩小到目标元素所在的一半,从而大大减少查找的次数。

二分查找的基本原理

排序:二分查找只能在有序数据中使用,数据必须是递增或递减顺序排列的。跳出循环的条件:左边值>右边值,其余都应进入循环,所以for left<=right

选择中间元素:每次查找时,选取当前范围的中间元素。

比较大小:将目标值与中间元素进行比较:

如果目标值小于中间元素,则继续在左半部分查找;

如果目标值大于中间元素,则继续在右半部分查找;

如果目标值等于中间元素,查找成功,返回该元素的索引。

重复过程:每次查找时,范围缩小一半,直到找到目标值或者搜索范围为空。

二分查找的时间复杂度

由于每次查找将范围缩小一半,二分查找的时间复杂度为 O(log n),其中 n 是待查找的元素个数。相比于线性查找的 O(n),二分查找在处理大规模数据时更加高效。

点击查看代码
func search(nums []int, target int) int {
left,right:=0,len(nums)-1
for left<=right {
mid:=left+(right-left)/2
if target<nums[mid]{
right=mid-1
}else if target >nums[mid]{
left = mid+1
}
if target ==nums[mid]{
return mid
}
}
return -1
}

704 二分查找 golang实现的更多相关文章

  1. Leetcode之二分法专题-704. 二分查找(Binary Search)

    Leetcode之二分法专题-704. 二分查找(Binary Search) 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 t ...

  2. LeetCode 704. 二分查找(Binary Search)

    704. 二分查找 704. Binary Search 题目描述 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target,如果 ...

  3. Java实现 LeetCode 704 二分查找(二分法)

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

  4. 代码随想录训练营day 1 |704 二分查找 27移除算法

    LeetCode 704.二分查找(C++) 题目链接 704.二分查找 题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 ...

  5. LeetCode 704.二分查找(C++)

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

  6. LeetCode 704. 二分查找

    题目链接:https://leetcode-cn.com/problems/binary-search/ 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函 ...

  7. C#LeetCode刷题-二分查找​​​​​​​

    二分查找篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  8. Lc_704二分查找

    package com.example.leetcode2; import java.util.*; /** * @description: 704. 二分查找 * 给定一个 n 个元素有序的(升序) ...

  9. 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素

    [算法训练营day1]LeetCode704. 二分查找 LeetCode27. 移除元素 LeetCode704. 二分查找 题目链接:704. 二分查找 初次尝试 看到题目标题是二分查找,所以尝试 ...

  10. C#.NET实现二分查找

    二分搜索法 定义 二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法. 适用范围 当数据量很大并且有序时,适宜采用该方法. 基本思想 假设数据是按升序排序的,对于给定值key,从序列的 ...

随机推荐

  1. Java-EL表达式替换和简化jsp页面中java代码的编写

    概念:Expression Language 表达式语言 作用:替换和简化jsp页面中java代码的编写 语法:$ 注意: jsp默认支持el表达式,如果要忽略el表达式 设置jsp中page指令中: ...

  2. Jingle Bio:产品出海的最重要一课是「重营销轻技术」?

    名字: Jingle Bio 开发者 / 团队: Luo Baishun 平台: Web 请简要介绍下这款产品 Jingle Bio 是一款不需要任何编程基础就可以轻松驾驭的个人网站制作工具,你可以使 ...

  3. FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作

    ​<FFmpeg开发实战:从零基础到短视频上线>一书的"2.1.2  音视频文件的封装格式"介绍了视频流的PS格式和TS格式.由于TS包的长度固定,从TS流的任一片段开 ...

  4. PowerBuilder现代编程方法X11:PB程序完全跨平台方案

    PB可能要支持Windows.macOS.Linux.iOS.Android与鸿蒙操作系统和X86.ARM.RISC-V与国产龙芯CPU的原生应用了! PowerBuilder现代编程方法X11:PB ...

  5. TokenObtainPairSerialize

    TokenObtainPairSerializer是Django REST framework的SimpleJWT库提供的序列化器.它用于对用户凭据(如用户名和密码)进行序列化和验证,并在成功的身份验 ...

  6. 吐血整理如何在Google Earth Engine上写循环 五个代码实例详细拆解

    在这里同步一篇本人的原创文章.原文发布于2023年发布在知乎专栏,转移过来时略有修改.全文共计3万余字,希望帮助到GEE小白快速进阶. 引言 这篇文章主要解答GEE中.map()和.iterate() ...

  7. 学习笔记--Java面向对象的继承

    Java面向对象的继承 继承 继承是面向对象的三大特性之一 继承基本作用:代码复用:重要作用:有了继承才能有以后的"方法的覆盖"和"多态" 继承语法格式: [修 ...

  8. 基于.NET开源、强大易用的短链生成及监控系统

    前言 今天大姚给大家分享一个基于.NET开源(MIT License).免费.强大易用的短链生成及监控系统:SuperShortLink. 项目介绍 SuperShortLink是一个基于.NET开源 ...

  9. 初读nginx.conf

    学成在线里教的部署门户,记录一下NGINX的部分配置是如何使用的 location块用于定义如何处理不同URL请求 1.代理: server { listen 80; server_name file ...

  10. 【C】Re06 数组与指针

    一.指针和数组 void pointerAndArray() { int array[5] = {1, 2, 3, 4, 5}; printf("pointer array -> %p ...