算法基础-二分查找

左闭右闭 [ 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

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);
        }
    }
}
相关推荐
学编程的小程4 小时前
LeetCode216
算法·深度优先
leeyayai_xixihah4 小时前
2.21力扣-回溯组合
算法·leetcode·职场和发展
01_4 小时前
力扣hot100——相交,回文链表
算法·leetcode·链表·双指针
萌の鱼4 小时前
leetcode 2826. 将三个组排序
数据结构·c++·算法·leetcode
Buling_04 小时前
算法-哈希表篇08-四数之和
数据结构·算法·散列表
AllowM4 小时前
【LeetCode Hot100】除自身以外数组的乘积|左右乘积列表,Java实现!图解+代码,小白也能秒懂!
java·算法·leetcode
RAN_PAND4 小时前
STL介绍1:vector、pair、string、queue、map
开发语言·c++·算法
fai厅的秃头姐!7 小时前
C语言03
c语言·数据结构·算法
lisanndesu7 小时前
动态规划
算法·动态规划
myprogramc7 小时前
十大排序算法
数据结构·算法·排序算法