leetcode算法练习 —— 求两个排序排序数组的中位数

本文介绍了一种在O(log(min(n,m)))时间内找到两个已排序数组中位数的高效算法。通过将所有元素重组为有序的两部分,中位数位于段点处。文章详细解释了算法的实现步骤。

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

问题描述

给定两个排序过的数组,求这两个排序数组的中位数, 在O(log(min(n, m)))内。

解题思路

将所有元素重组成有序的两部分,中位数就在段点处

def find_median(a, b):
	#if len(a) > len(b):
	#	a, b = b, a
	imin, imax = 0, len(a)
	n, m = len(a), len(b)
	while imin <= imax :
		i =  ( imin + imax ) // 2
		j =  ( n + m  + 1) // 2 - i
		if  i < n  and j > 0 and b[j - 1] > a[i]:
			#i is too small
			imin = i + 1
		elif i > 0 and j < m and b[j] < a[i-1]:
			# i is too big
			imax = i - 1
		else:
			# desired case
			if i == 0:
				return b[j-1]
			elif j ==0:
				return a[i-1]
			else:
				return max(a[i-1], b[j-1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值