二分法在有序数组中的应用(Java&C)

文章目录

在有序数组中确定num是否存在

Java实现

java 复制代码
public static boolean exist(int[] arr, int num) {
		if (arr == null || arr.length == 0) {
			return false;
		}
		int L = 0;
        int R = arr.length - 1;
        int M = 0;
		while (L <= R) {
			M = (L + R) / 2;
			if (arr[M] == num) {
				return true;
			} else if (arr[M] > num) {
				R = M - 1;
			} else {
				L = M + 1;
			}
		}
		return false;
	}

C语言实现

c 复制代码
int exist(int arr[], int length, int num) {
    if (arr == NULL || length == 0) {
		return 0;
	}
	int L = 0;
	int R = length - 1;
    int M = 0;
	while (L <= R) {
		M = (L + R) / 2;
		if (arr[M] == num) {
			return 1;
		}
		else if (arr[M] < num) {
			L = M + 1;
		}
		else {
			R = M - 1;
		}
	}
	return 0;
}

在有序数组中找>=num的最左位置

Java实现

java 复制代码
public static int findLeftIndex(int[] arr, int num) {
        int L = 0;
        int R = arr.length - 1;
        int M = 0;
        int Index = -1;
        while (L <= R) {
            M = (L + R) / 2;  
            // 数组长度很长的时候有溢出风险
            // M = L + (R - L) / 2;
            // M = L + ((R - L) >> 1);
            if (arr[M] >= num) {
                Index = M;
                R = M - 1;
            } else {
                L = M + 1;
            }
        }
        return Index;
    }

C语言实现

c 复制代码
int findLeftIndex(int arr[], int length, int num) {
	int R = length - 1;
	int L = 0;
	int M = 0;
	int Index = -1;
	while (L <= R) {
        M = (R + L) / 2;
		if (arr[M] >= num) {
			Index = M;
			R = M - 1;
		}
		else {
			L = M + 1;
		}
	}
	return Index;	
}

在有序数组中找<=num的最右位置

Java实现

java 复制代码
public static int findRightIndex(int[] arr, int num) {
		int L = 0;
    	int R = arr.length - 1;
    	int M = 0;
		int Index = -1;
		while (L <= R) {
			M = (L + R) / 2; 
			if (arr[M] <= num) {
				Index = M;
				L = M + 1;
			} else {
				R = M - 1;
			}
		}
		return Index;
	}

C语言实现

c 复制代码
int findRightIndex(int arr[], int length, int num) {
	int R = length - 1;
	int L = 0;
	int M = 0;
	int Index = -1;
	while (L <= R) {
        M = (R + L) / 2;
		if (arr[M] <= num) {
				Index = M;
				L = M + 1;
			} else {
				R = M - 1;
			}
		}
	return Index;
}
相关推荐
小刘|几秒前
Spring AI 结构化输出 + 大模型参数全解(含千问调优)
java·后端·spring
云烟成雨TD2 分钟前
Spring AI Alibaba 1.x 系列【79】图执行生命周期的可观测性基础设施
java·人工智能·spring
霸道流氓气质6 分钟前
Java 单元测试生成大量 Excel 测试数据实战指南
java·单元测试·excel
MicroTech20256 分钟前
量子隐形传态路线的瓶颈与突破,微算法科技(MLGO)以技术创新助力量子通信长距离组网
科技·算法·量子计算
洛水水6 分钟前
【力扣100题】89.下一个排列
数据结构·算法·leetcode
洛水水7 分钟前
【力扣100题】90.寻找重复数
算法·leetcode·职场和发展
io无心11 分钟前
基于Image 2的多配件商品图生成技术实现(已开源)
java·image2
鱼子星_13 分钟前
【数据结构】排序的拓展——快速排序的生态多样性与归并排序沾染文件操作
c语言·数据结构·算法
alphaTao13 分钟前
LeetCode 每日一题 2026/6/8-2026/6/14
算法·leetcode
逢君学术论文AI写作14 分钟前
Java第22课:Servlet获取请求参数+POST请求+表单交互
java·servlet·ai写作