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

吃透二分法的模板解法(适合所有类似于二分的算法题)

寻找一个有序数组中>=第一个大于某个数的位置:

左端点和右端点都是闭区间的做法[left,right]:

退出循环时候如上图:

    //寻找一个有序数组中>=第一个大于某个数的位置,闭区间[left,right]public int binarysort(int[] nums,int target){int left=0,right=nums.length-1;while(left<=right){//防止溢出int middle=left+(right-left)/2;if(nums[middle]<target){left=middle+1;//[middle+1,right]}else {right=middle-1;//[left,middle-1]}}return left;}

左端点是闭区间,右端点是开区间的做法[left,right):

退出循环时候如右图:

    //寻找一个有序数组中>=第一个大于某个数的位置(左闭右开区间[left,right))public int binarysort1(int[] nums,int target){int left=0,right=nums.length;while(left<right){//防止溢出int middle=left+(right-left)/2;if(nums[middle]<target){left=middle+1;//[middle+1,right)}else {right=middle;//[left,middle)}}return left;//or return right}

左端点是开区间,右端点是开区间的做法(left,right):

退出循环时候如右图:

    //寻找一个有序数组中>=第一个大于某个数的位置(左闭右开区间(left,right))public int binarysort2(int[] nums,int target){int left=-1,right=nums.length;while(left+1<right){//防止溢出int middle=left+(right-left)/2;if(nums[middle]<target){left=middle+1;//(middle,right)}else {right=middle;//(left,middle)}}return right;}

其他类型题目转换:

对于其他四种解释如下

1.大于等于8第一个位置上面已经详细解释。

2.大于8的第一个位置等价于大于等于9的第一个位置。

3.小于8的最后一个位置可以等价于大于等于8的第一个位置再减去1.

4.小于等于8的最后一个位置可以等价于大于等于9的第一个位置再减去1.

http://www.dtcms.com/a/269520.html

相关文章:

  • 百度斩获大模型中标第一,股价上涨5%
  • 深度剖析:Ceph分布式存储系统架构
  • 实时开发IDE部署指南
  • Tomcat与IIS:核心差异及接口调用实战解析
  • paddlehub环境搭建和测试
  • 【PTA数据结构 | C语言版】在顺序表 list 的第 i 个位置上插入元素 x
  • C语言使用Protobuf进行网络通信
  • HTTP/3.0的连接迁移使用连接ID来标识连接为什么可以做到连接不会中断
  • 【论文阅读】基于 GAN 和深度迁移学习的频谱预测:一种跨带数据增强框架
  • 函数-1-字符串函数
  • Python文件操作(五分钟小白从入门到精通)
  • 微算法科技(NASDAQ MLGO)研究非标准量子预言机,拓展量子计算边界
  • 【QT】-隐式转换 explicit用法
  • linux常用管路命令
  • 【1-快速上手】
  • 部署并运行Spike-Driven-Transformer或QKFormer
  • 香港站群服务器与普通香港服务器对比
  • 算法设计与分析:分治、动态规划与贪心算法的异同与选择
  • 【计算机网络】第三章:数据链路层(下)
  • 89104 PCIe Switch芯片国产替代 - PCIE5.0国产AI服务器高性能扩展,支持海光/龙芯/飞腾等
  • 【零基础学AI】第30讲:生成对抗网络(GAN)实战 - 手写数字生成
  • 从SEO到GEO:优化策略如何应对传统搜索与AI搜索的巨变
  • SpringAI编码实战:使用本地免费部署的大语言模型跑起来
  • NuxtJS中网络请求模块的封装与最佳实战
  • leetcode202.快乐数
  • 算法设计与分析 知识总结
  • Puppeteer 库简介:背景、用法与原理
  • LeetCode--42.接雨水
  • 什么是RAG?
  • 深入解析Java中的“128陷阱“:Integer缓存机制源码分析