算法基础-二分查找

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

while( left <= right )
if( amid > target )
right = mid - 1
else if( amid < target )
left = mid + 1

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

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

java 复制代码
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);
        }
    }
}
相关推荐
Godspeed Zhao10 小时前
现代智能雷达技术15——算法(1)
人工智能·算法·雷达
代码什么用10 小时前
LeetCode-42. 接雨水
算法·leetcode
lengxuenong10 小时前
枚举及其优化学习手册
c++·学习·算法·青少年编程
小O的算法实验室11 小时前
IEEE TAI,RoCo:基于角色的LLM协作实现自动启发式设计
算法
小范的技术工坊11 小时前
大模型蒸馏
人工智能·算法·数据挖掘·大模型
Benny_Tang11 小时前
P9527 [JOIST 2022] 洒水器 / Sprinkler 题解
c++·算法
kiracrimson11 小时前
希尔排序:让插入排序不再怕逆序
数据结构·算法·排序算法
yi01112 小时前
DAY17: LeetCode 139|单词拆分:从“把单词删掉”到用 DP 记录合法切口
人工智能·笔记·python·算法·leetcode·动态规划
陈希瑞12 小时前
LongCat-2.5-Preview 的web逆向能力实测
人工智能·算法·wasm
tangguofeng13 小时前
基于分治策略的循环赛日程表问题的思路讲解
算法