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

算法基础-二分查找

左闭右闭 [ left,right ]        [1,1]可以    

while( left <= right )        
        if( a[mid] > target )
                right = mid - 1
        else if( a[mid] < target )
                left = mid + 1


左闭右开 [ left,right )        [1,1)不可以

while( left < right )        
        if( a[mid] > target )        已经>target,开区间right = mid
                right = mid
        else if( a[mid] < target )
                left = mid + 1

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int l, r;
        int[] a = new int[n];
        for(int i = 0; i < n; i ++)
            a[i] = in.nextInt();

        while(m -- > 0) {
            int first = -1, last = -1;
            int x = in.nextInt();
            l = 0;
            r = n - 1;
            while(l <= r) {
                int mid = (l + r) / 2;
                if(a[mid] > x) {
                    r = mid - 1;
                } else if(a[mid] < x) {
                    l = mid + 1;
                } else {
                    first = mid;
                    r = mid - 1;
                }
            }
            l = 0;
            r = n - 1;
            while(l <= r) {
                int mid = (l + r) / 2;
                if(a[mid] > x) {
                    r = mid - 1;
                } else if(a[mid] < x) {
                    l = mid + 1;
                } else {
                    last = mid;
                    l = mid + 1;
                }
            }
            System.out.println(first + " " + last);
        }
    }
}


http://www.kler.cn/a/312259.html

相关文章:

  • AWS认证SAA-C0303每日一题
  • 除了 Postman,还有什么好用的 API 调试工具吗
  • python装饰器的使用以及私有化
  • 《情商》提升:增强自我意识,学会与情绪共处
  • [Docker#8] 容器配置 | Mysql | Redis | C++ | 资源控制 | 命令对比
  • 【日志】392.判断子序列
  • 2025秋招LLM大模型多模态面试题(六)-KV缓存
  • 亿级数据表多线程update锁表问题
  • 浅谈人工智能之基于ollama本地大模型结合本地知识库搭建智能客服
  • 2024最新版,人大赵鑫老师《大语言模型》新书pdf分享
  • 嵌套函数的例子(TypeScript)
  • QT QObject源码学习(二)
  • Netty源码解析-请求处理与多路复用
  • uniapp中使用picker-view选择时间
  • vulhub搭建漏洞环境docker-compose up -d命令执行报错以及解决方法汇总
  • 信息收集常用指令
  • PDF样本册如何分享到朋友圈
  • Qt自定义信号、带参数的信号、lambda表达式和信号的使用
  • elemntui el-switch 在表格内改变状态失败,怎么复原???
  • 一文读懂SpringCLoud
  • 【RabbitMQ 项目】服务端数据管理模块之交换机管理
  • prometheus监控linux虚拟机
  • 操作系统迁移(CentOs -> Ubuntu)
  • Wacom 和 Splashtop 携手共赴 IBC 2024 展会,宣布向欧洲市场隆重推出 Wacom Bridge
  • XSS漏洞挖掘利用总结(附个人常用payload)
  • MyBatis 分批次执行(新增,修改,删除)