Leetcode: Median of Two Sorted Arrays

探讨如何在两个已排序的数组中找到中位数,通过二分查找的方法实现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)).

You may assume nums1 and nums2 cannot be both empty.

Example 1:

nums1 = [1, 3]
nums2 = [2]

The median is 2.0

Example 2:

nums1 = [1, 2]
nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5

   看到已序数组,可能最直接的想法就是合并两个有序数组,然后求中位数,使用归并排序合并的方式时间复杂度O(n+m),题目要求算法时间复杂度为O(log(m+n))。由于数组已序,可以考虑使用二分的方式来解决,每次缩小一半数据规模,时间复杂度为O(log(n+m)),满足要求,OK,该怎么做呢?

  设两个数组A,B,长度分别为len1,len2 可以将问题看作二分查找第k数的问题,由于是两个数组,因此按照两个数组长度所占比例把第k(下标)数分割,每次查找A数组的A[p]和B[q]两个数进行比较大小,其中p=max(1,len1/(len1+len2)*k),q=k-p,取max保证p至少为1,向前搜索一个。A[p],B[q]两者的关系有三种情况:

(1)A[p] > B[q],此时可以知道第k数一定在A{left1,left1+p},B{left2+q,right2},丢掉一半数据

(2)A[p] < B[q],此时可以知道第k数一定在A{left1+p,right1},B{left2,left2+q},丢掉一半数据

(3)A[p]==B[q],返回其中一个即可

定义函数查找第k数: findKth(A,B,l1,r1,l2,r2,k)

为了保证第一个数组长度一定小于第二个数组长度

递归边界

所以完整的第k数的算法是

题目要求求两个数组的中位数,因此可能存在两种情况,两个数组长度之和为奇数或者偶数

奇数:k = (len1+len2)/2+1 。

偶数:需要查找两个数,然后求平均 k1=(len1+len2)/2, k2 = k1+1。

所以此题完整的代码是:

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值