4. Median of Two Sorted Arrays

本文介绍了一个高效算法,用于找到两个已排序数组的中位数。该算法通过递归查找第K小元素的方法实现,整体运行时间复杂度为O(log(m+n))。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

public class Solution {
	public static int findKthSmallest(int[] a, int m, int begin1, int[] b, int n, int begin2, int k) {

		if (m > n)
			return findKthSmallest(b, n, begin2, a, m, begin1, k);   //统一格式,前面的数组较短,后面的数组较长
		if (m == 0)
			return b[begin2 + k - 1];   //前一数组空,则返回后一数组中间值
		if (k == 1)
			return Integer.min(a[begin1], b[begin2]);    //k=1时,只能是俩数组第一个中较小的
		int partA = Integer.min(k / 2, m), partB = k - partA;   //partA指前一数组所要拿出来比较的下标,partB指后一数组所要拿出来比较的下标
		if (a[begin1 + partA - 1] == b[begin2 + partB - 1])   //如果相等则返回数值
			return a[begin1 + partA - 1];
		else if (a[begin1 + partA - 1] > b[begin2 + partB - 1])     //根据数值比较,重新设置参数递归
			return findKthSmallest(a, m, begin1, b, n - partB, begin2 + partB, k - partB);
		else
			return findKthSmallest(a, m - partA, begin1 + partA, b, n, begin2, k - partA);

	}

	public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
		int len1 = nums1.length, len2 = nums2.length, sumLen = len1 + len2;
		//判断总个数的奇偶性,然后分类
		if (sumLen % 2 != 0) {

			return findKthSmallest(nums1, len1, 0, nums2, len2, 0, sumLen / 2 + 1);
		} else {
			return (findKthSmallest(nums1, len1, 0, nums2, len2, 0, sumLen / 2)
					+ findKthSmallest(nums1, len1, 0, nums2, len2, 0, sumLen / 2 + 1)) / 2.0;
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值