二分搜索-C

有序数组寻找不大于目标的最大值索引(左边界)

c 复制代码
// 升序
int cmp(int a, int b) {
	return a-b;
}
long searchLeft(long left, long right, int target) {
	// 1.判断[left,right)区间内是否有左边界
	if(cmp(left,target) < 0) return -1;
	// 左闭右开,有效区域[left,right)
    while(left < right) {
        long mid = left + (right -left)/2;
        // mid对应值不比目标值小,说明左边界在左侧,截断右边区域,right=mid,有效区域由[left,right)变为[left,mid)
        if(cmp(mid, target) >= 0) {
            right = mid;
        }
        // mid对应值比目标值小,说明左边界在右侧,截断左边区域,left = mid+1,有效区域由[left,right)变为[mid+1,right)
        else {
            left = mid+1;
        }
    }
    // 2.如果[left,right)区间内有左边界,在区间收敛的最后一步总是由[x,x+1)变为[x,x)或[x+1,x+1),即left==right
    return right;
}

有序数组寻找不小于目标的最小值索引(右边界)

c 复制代码
// 升序
int cmp(int a, int b) {
	return a-b;
}
long searchRight(long left, long right, int target) {
	// 1.判断[left,right)区间内是否有右边界
	if(cmp(right-1,target) > 0) return -1;
	// 左闭右开
    while(left < right) {
        long mid = left + (right -left)/2;
        // mid对应值比目标值小,说明右边界在右侧,截断左边区域,有效区域由[left,right)变为[mid+1,right)
        if(cmp(mid, target) < 0) {
            left = mid+1;
        }
        // mid对应值比目标值大,说明右边界在左侧,截断右边区域,right=mid,有效区域由[left,right)变为[left,mid)
        else if(cmp(mid, target) > 0){
            right = mid;
        }
        // mid对应值与目标值相等1.说明右边界在右侧,截断左边区域,但mid本身可能是右边界,有效区域由[left,right)变为[mid,right) 2. 在区间为[x,x+1)时,且进入此判断,下次还会进,这里增加二次进入判断。
        else {
            if(left == mid) break;
            left = mid;
        }
    }
    // 2.[left,right)区间内有右边界,在区间收敛的最后一步总是由[x,x+1)变为[x,x+1)或[x+1,x+1),left值为最终结果
    return left;
}
相关推荐
To_OC10 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
炸膛坦客11 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
旖-旎11 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC12 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn13 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹13 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术13 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
CV-Climber16 小时前
检索技术的实际应用
人工智能·算法
hhzz17 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型