文章目录

    • 寻找第一个的满足条件的位置
    • 寻找最后一个的满足条件的值
  • 参考

寻找第一个的满足条件的位置

例如nums = [5,7,7,8,8,10], target = 8,第一个的满足条件的位置=3.

查找一个数类似, 我们仍然套用查找一个数的思维框架和代码模板。

思维框架

  • 首先定义搜索区间为 [left, right]。
  • 终止搜索条件为 left > right。
  • 循环体内,我们不断计算 mid ,并将 nums[mid] 与 目标值比对。
    • 如果 nums[mid] 等于目标值, 则收缩右边界,我们找到了一个备胎,由于我们要找第 1 个位置,此时我们应该向左边继续查找;(注意这里不一样
    • 如果 nums[mid] 小于目标值, 说明目标值在 mid 右侧,这个时候搜索区间可缩小为 [mid + 1, right]
    • 如果 nums[mid] 大于目标值, 说明目标值在 mid 左侧,这个时候搜索区间可缩小为 [left, mid - 1]
  • 由于不会提前返回,因此我们需要检查最终的 left,看 nums[left]是否等于 target。
    • 如果不等

二分法02:寻找第一个和最后一个的满足条件的位置相关推荐

  1. C++学习笔记-----二分法之寻找非减序列第一个大于某个值的数或最后一个小于某个值的数

    二分法在对有序序列的处理上可以达到O(lg(n))的时间复杂度,通常用在二分查找上. 此时有一个有序序列,给定一个数n,n可以在这个序列中也可以不在,要求找到第一个大于n的数和第一个小于n的数. 实际 ...

  2. LeetCode--34.在排序数组中查找元素第一个和最后一个位置(二分法)

    在排序数组中查找元素第一个和最后一个位置(C++) 1. 题目描述 2. 题目分析 3. C++语言实现 1. 题目描述 难度:中等 2. 题目分析 看到题目我们需要知道以下几点: 数组是有序的 数组 ...

  3. 34. 在排序数组中查找元素的第一个和最后一个位置——二分法的魔鬼细节 小记

    每次遇到二分法,一看就会,一写就废,在力扣上看到一篇很好的总结,因此做一下搬运工 参考题解--二分法各种情况及细节剖析,附送小诗一首 场景包括寻找一个数.寻找左侧边界.寻找右侧边界. 而且,我们就是要 ...

  4. LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置

    前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...

  5. 基本的二分查找、寻找第一个和最后一个数的二分查找

    二分查找 1 二分查找的框架 2 寻找一个数(基本的二分搜索) 3 寻找左侧边界的二分搜索 4 寻找右侧边界的二分查找 5 合并 二分查找场景:有序数组寻找一个数.寻找左侧边界(有序数组等一个等目标数 ...

  6. 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...

    作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...

  7. java替换最后一个字符_Excel公式技巧23: 同时定位字符串中的第一个和最后一个数字...

    学习Excel技术,关注微信公众号: excelperfect 在很多情况下,我们都面临着需要确定字符串中第一个和最后一个数字的位置的问题,这可能是为了提取包围在这两个边界内的子字符串.然而,通常的公 ...

  8. C#:快速排序,有相同的数字会忽略,然后继续先前的寻找方向去找下一个满足要求的数字进行替换

    概述 挖坑填数+分治法 对挖坑填数进行总结 i =L; j = R; 将基准数挖出形成第一个坑a[i],例如第一次的基准数就是0索引的 j–由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中. ...

  9. 【Android Studio学习】第一篇、制作一个拥有登录和注册功能的简易APP

    目录 第一部分.前言 1.目标效果 2.准备知识 第二部分.详细步骤 1.新建Empty工程 ​2.添加资源文件 3.搭建注册界面 4.搭建登录界面 5.编写注册界面和登录界面的代码 6.设置APP初 ...

  10. Babylonjs入门02——VsCode+vue+babylonjs开发第一个babylon项目程序

    Babylonjs入门02--VsCode+vue+babylonjs开发第一个babylon项目程序 1 环境搭建 2 创建vue项目 3 基于vue项目写第一个babylon项目 4 下一期再见 ...

最新文章

  1. 出任 Twitter 独立董事,AI 女神李飞飞的传奇人生
  2. Depth by Poking:从自监督抓取学习深度估计
  3. python语法大全-总结了Python中的22个基本语法
  4. PyTorch 实现 GAN 生成式对抗网络 含代码
  5. WPF-21:WPF实现仿安卓的图案密码键盘(初级)
  6. 两条边延长角会有什么变化_叶片锁是什么样的 叶片锁使用方法【详解】
  7. socket编程五种模型
  8. 60-008-024-使用-命令-flink如何动态支持依赖jar包提交
  9. 第5堂:看到词句就会读-上
  10. Vue项目报错:This relative module was not found
  11. Extjs中TextField中显示图标
  12. 如何查看oracle死鎖,怎么查看oracle是否有死鎖
  13. CodeIgniter 框架的安装
  14. centos长ping输出日志的脚本
  15. 步进电机转速 与 pwm 关系
  16. 智能指针的标准之争:Boost vs. Loki [转]
  17. 代码质量有哪些评判标准?
  18. 【web全景】web全景实现方案(转载)
  19. 最全的Android源码目录结构详解
  20. 通过车牌识别实现进出厂无人值守

热门文章

  1. 杭电2072 单词数
  2. Codeforces Round #352 (Div. 1) B. Robin Hood
  3. (MathType)公式编号(1)和(2a)(2b)混编
  4. 来不及说再见,Kobe
  5. 【ubuntu】配置zsh
  6. 712. Minimum ASCII Delete Sum for Two Strings
  7. 【Oracle】Oracle基本数据类型总结
  8. Android Studio在创建项目是一直处于building “project name”gradle project info的解决办法...
  9. 【java基础 3】树形结构数据呈现的递归算法实现
  10. 关于DYNPRO程序的系统迁移与版本不匹配问题之一