码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 力扣刷题-数组-二分查找总结


    前言

    二分查找的使用前提/一般何时想到使用二分查找:数组为有序数组、数组中重复元素(因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的)
    二分查找的关键 / 不容易写混乱的关键 / 谨记的不变量:区间定义不变量——要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。
    区间定义分类:区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)

    二分法第一种写法

    image.png

    二分法第二种写法

    image.png

    题目

    704 二分查找

    (简单,二分查找基础!)
    给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
    这题是最基础的二分查找题目,没有变形,采用二分查找方法做即可,需注意循环不变量。

    35 搜索插入位置

    (简单,二分查找基础!)
    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
    这题算是二分查找的一个变型,就是当存在目标值的时候,返回索引。但不存在目标值的时候,返回的不是704题中的-1,而是要返回被顺序插入的位置。跳出来想一想,现在是找不到位置(例如:2 3 5 6,目标值是4),要找插入位置,当找不到,是破坏循环条件:left<=right,现在right到left左边了,刚好right+1就是目标值位置,所以插入位置就应该是right+1

    34 在排序数组中查找元素的第一个和最后一个位置

    (中等,二分查找进阶)
    给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。
    这题算是二分查找的进阶,因为在数组中元素已经不重复,目标值可能有多个,有开始位置和结束位置,这就要分析一下了:
    image.png
    所以关键是去寻找左右边界!——> 采用二分法来去寻找左右边界,为分别写两个二分来寻找左边界和右边界。
    关键:循环不变量 + 计算出来的右边界(left = mid + 1; right_border = left)是不包含target的右边界,左边界(right = mid - 1; left_border = right)同理

    参考:https://programmercarl.com/

  • 相关阅读:
    C# Thread.Sleep 不精准的问题以及解决方案
    嵌入式学习-FreeRTOS-Day3
    SSL/TLS 的工作原理
    Spelling sentences
    idea 连接远程 docker 并部署项目到 docker
    想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树
    2023年【危险化学品生产单位安全生产管理人员】及危险化学品生产单位安全生产管理人员模拟考试题
    全解MySQL之各方位事无巨细的剖析存储过程与触发器!
    黄菊华老师,Java Servlet毕业设计毕设辅导课(5):Servlet配置虚拟路径映射
    Vue.Draggable 踩坑:add 事件与 change 事件中 newIndex 字段不同之谜
  • 原文地址:https://blog.csdn.net/hxhabcd123/article/details/133148747
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号