当前位置: 首页 > news >正文

算法通关村——透彻理解二分查找

1. 循环法

    public static int binarySearch(int[] arr, int low, int high, int target) {while (low <= high) {// 这样写主要是避免溢出的情况,以及>>优先级小于+,避免出现死循环int mid = low + ((high - low) >> 1);if (arr[mid] == target) {return mid;} else if (arr[mid] < target) {low = mid + 1;} else {high = mid - 1;}}return -1;}

2. 递归

    public static int binarySearch1(int[] array, int low, int high, int target) {if (low < high) {int mid = low + ((high - low) >> 1);if (array[mid] == target) {return mid;} else if (array[mid] > target) {return binarySearch(array, low, mid - 1, target);} else {return binarySearch(array, mid + 1, high, target);}}return -1;}

3. 元素中有重复的二分查找

假设现在有个数组里面有重复元素,并且按照增序排列,如果有相同元素,返回最左侧的第一个重复元素的位置。

核心思路也是比较简单了,当找到第一个重复的元素时候,记录位置,然后向左移动,左边的不是目标元素,就意味着左边没有重复的目标元素,然后+1就是目标元素的位置

 public static int search(int[] nums, int target) {if (nums == null || nums.length == 0)return -1;int low = 0;int high = nums.length - 1;while (low <= high) {int mid = low + ((high - low) >> 1);if (nums[mid] < target) {low = mid + 1;} else if (nums[mid] > target) {high = mid - 1;} else {// 找到了符合目标元素的数据位置,然后一直往左遍历,知道不是目标元素或者索引为0的时候停止while (mid != 0 && nums[mid] == target) {mid--;}if (mid == 0 && nums[mid] == target) {return mid;}return mid + 1;}}return -1;}
http://www.lryc.cn/news/114596.html

相关文章:

  • PAT(Advanced Level)刷题指南 —— 第六弹(⭐有点难度⭐)
  • 个人对智能家居平台选择的思考
  • 无涯教程-Lua - while语句函数
  • MySql学习3:常用函数
  • 24届近5年江南大学自动化考研院校分析
  • C++ 数组
  • Android LinearLayout dynamic add child ImageView,Glide load,kotlin
  • HTML 是什么?它的全称是什么?
  • ATF(TF-A)安全通告
  • LVS—DR集群的搭建
  • 如何理解容量测试?如何做容量测试?
  • 文件上传漏洞(webshell)
  • .net几行代码音乐API各排行榜 热搜 入库
  • 使用gpt对对话数据进行扩增,对话数据扩增,数据增强
  • 算法练习工程1.2
  • 数字IC流片经历有多重要?怎样才能有流片机会?
  • fontfaceobserver 第三方字体加载优化方案
  • laravel安装composer依赖
  • 问题聚集度Hive SQL
  • Windows11右键菜单
  • 篇十四:观察者模式:对象间的通知与更新
  • Hadoop知识点总结
  • 相关搜索量激增10000%!“芭比周边”产品火爆亚马逊!
  • C高级第四讲
  • Idea小操作
  • 【计算机网络】socket编程
  • 2023华为OD机试真题 Python 实现【寻找最大价值的矿堆/深度优先搜索】
  • 【Java面试】Nacos自动注册原理实现以及服务注册更新并如何保存到注册表
  • linux 手动编译安装 pkg-config 步骤
  • 【MongoDB】数据库、集合、文档常用CRUD命令