二分法在有序数组中的应用(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;
}
相关推荐
EricWang135810 分钟前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
我是谁??12 分钟前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
小码农<^_^>14 分钟前
优选算法精品课--滑动窗口算法(一)
算法
让学习成为一种生活方式16 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
羊小猪~~16 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
晨曦_子画22 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
软工菜鸡42 分钟前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
南宫生44 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
希言JY1 小时前
C字符串 | 字符串处理函数 | 使用 | 原理 | 实现
c语言·开发语言
午言若1 小时前
C语言比较两个字符串是否相同
c语言