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

【数据结构与算法】整数二分

问题描述

对一个排好序的数组,要求找到大于等于7的最小位置和小于等于7的最大位置
在这里插入图片描述

大于等于7的最小位置

易知从某个点开始到最右边的边界都满足条件,我们要找到这个区域的最左边的点。
在这里插入图片描述
开始二分!
left指针指向最左边界,right指针指向最右边界。
mid = (left + right )/2,指向6
if(check(x[mid]>=7)) right = mid
else left = mid +1
这里6<7,mid指向的元素不符合条件,left 右移至mid + 1
重新计算mid,mid指向9
9>7,满足条件,right 移到mid处,
重新计算mid,mid指向8
8>7,满足条件,right 移到mid处
mid = 8, left = right 停止!

小于等于7的最大位置

易知从左边界到某个点都满足条件,我们要找到这个区域的最右边的点。
在这里插入图片描述
eft指针指向最左边界,right指针指向最右边界。
mid = (left + right +1 )/2,指向6
if(check(x[mid]<=7)) left= mid
else right = mid -1

代码

acwing 789 找整数出现的初次和最后一次

#include <iostream>using namespace std;int mat[100001];//找满足条件的最左边界
void findlx(int mat[], int quei, int n){int left = 0;int right = n-1;int mid;while(left!=right){mid = (left +right )>>1;if(mat[mid] >= quei){right = mid;}else {left = mid + 1;}}if(mat[left]!=quei){cout<<-1<<" ";}else{cout<<left<<" ";}}//找满足条件最右边界
void findrx(int mat[], int quei, int n){int left = 0;int right = n-1;int mid;while(left!=right){mid = (right + left +1)>>1;if(mat[mid]<=quei){left = mid;}else{right = mid -1 ;}}if(mat[left]!=quei){cout<<-1<<endl;}else{cout<<left<<endl;}}int main(){int n,q;cin>>n>>q;int i;for(i =0 ; i< n; i++){cin>>mat[i];}for(i =0; i<q; i++){int quei;cin>>quei;int start, end;findlx(mat, quei, n);findrx(mat, quei, n);}return 0;}
http://www.lryc.cn/news/309706.html

相关文章:

  • java项目打包运行报异常:xxxxx-1.0-SNAPSHOT.jar中没有主清单属性
  • MAC-键盘command快捷键、设置windows快捷键
  • C++ 补充之常用遍历算法
  • 【Linux杂货铺】调试工具gdb的使用
  • FL Studio Producer Edition2024中文进阶版Win/Mac
  • 无需邀请码,Xinstall实现精准分享归因
  • 机器人与AGI会撞出什么火花?
  • Linux yum安装pgsql出现Bad GPG signature错误
  • 第18章-DHCP
  • [物联网] OneNet 多协议TCP透传
  • 如何让网页APP化 渐进式Web应用(PWA)
  • 50 vmalloc 的实现
  • 程序员的金三银四求职宝典!
  • day04_拦截器Apifox角色管理(登录校验,API接口文档,权限管理说明,角色管理,添加角色,修改角色,删除角色)
  • 在线上传解压PHP文件代码,压缩/压缩(网站一键打包)支持密码登录
  • 【刷题】模拟
  • 【打工日常】使用docker部署在线Photopea用于linux下替代ps
  • leetcode 热题 100_盛最多水的容器
  • 基本正则表达式
  • sqlserver保存微信Emoji表情
  • 网络编程 io_uring
  • Java中的static
  • 如何在群晖Docker运行本地聊天机器人并结合内网穿透发布到公网访问
  • lv20 QT进程线程编程
  • 什么是机器人学习?
  • 裸机程序--时间片调度
  • 【web APIs】5、(学习笔记)有案例!
  • 【刷题1】LeetCode 994. 腐烂的橘子 java题解
  • Java的运行机制与Java开发环境的搭建
  • 【Java】面向对象之多态超级详解!!