二分法在有序数组中的应用(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;
}
相关推荐
进击的荆棘1 小时前
优选算法——双指针
数据结构·算法
努力努力再努力wz1 小时前
【Linux网络系列】:JSON+HTTP,用C++手搓一个web计算器服务器!
java·linux·运维·服务器·c语言·数据结构·c++
魂梦翩跹如雨1 小时前
死磕排序算法:手撕快速排序的四种姿势(Hoare、挖坑、前后指针 + 非递归)
java·数据结构·算法
带刺的坐椅8 小时前
Solon AI Skills 会是 Agent 的未来吗?
java·agent·langchain4j·solon-ai
夏鹏今天学习了吗8 小时前
【LeetCode热题100(87/100)】最小路径和
算法·leetcode·职场和发展
jacGJ8 小时前
记录学习--文件读写
java·前端·学习
哈哈不让取名字8 小时前
基于C++的爬虫框架
开发语言·c++·算法
花间相见8 小时前
【JAVA开发】—— Nginx服务器
java·开发语言·nginx
扶苏-su9 小时前
Java---Properties 类
java·开发语言
cypking9 小时前
四、CRUD操作指南
java