寻找两个正序数组的中位数——力扣算法系列4

2020.06.26—27 周五、周六
4寻找两个正序数组的中位数
这道题目在我点进去之前我看着“困难”两个大字,心生怯惧。点进去之后看了一遍题目,不过如此。脑子里瞬间想到归并找中位数。然鹅!!!困难是真的困难!时间复杂度O(log(m+n))千万不要忽略!!
网上有很多帖子时间复杂度O(m+n)就好意思贴上去。

首先介绍中位数的概念
一般我们理解的中位数是指一个有序数组里排在中间的数。
准确的定义是:选定一个数(不一定包含在数组里),让数组里大于和小于这个数的元素数量都不超过总元素数量的一半,这个数叫中位数。
比如:
1,2,3,4,5的中位数是3 (可以理解为3在中间;也可以说小于3的数有两个,大于3的数有两个,都不超过总数5的一半)
1,2,3,3,3的中位数是3 (可以理解为3在整个数组顺序上的中间)在这里会有疑问,小于3的数有两个可是大于3的数有零个。故实际操作定义如下:
总数为奇数,中位数就是有序序列下标在中间的那个数。
总数为偶数,中位数就是中间两个数的平均数。

——————————我是分割线——————————
题目:给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。

示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0

示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
——————————我是分割线——————————
解法:
思路:首先说一下错误的解法,也是大部分人第一时间想到的解法——归并,然后找到中位数(总数为奇数个则找最中间的那个数;总数是偶数个则找中间的两个求平均值)。当然这种解法的代码我也会放出来,但是声明!这种解法是不符合题意的!

# 不符合时间按复杂度O(log(m+n))
def findMedianSortedArrays(nums1, nums2):
	m = len(nums1)
	n = len(nums2)
	ls = []
	i=0
	j=0
	while i<m and j<n: #一旦有一个数组遍历完毕则完毕
		if nums1[i] < nums2[j]:
			ls.append(nums1[i])
			i = i + 1
		else:
			ls.append
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值