leetcode 4. Median of Two Sorted Arrays
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)).
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
问题转换为求第k小的值问题。假设有2个数组一共有5个数,那么第3小的值就是中位数。假设有2个数组6个数,那么第3小和第4小的数的平均值就是其中位数。
题目要求用O(log(n+m))的时间复杂度,可以用二分去解决(参考网上).
思路:首先假设数组a和b的元素个数都大于k/2,我们比较a[k/2-1]
和b[k/2-1]
两个元素,这两个元素分别表示a的第k/2小的元素和b的第k/2小的元素。
这两个元素比较共有三种情况:>、<和=。如果a[k/2-1]<b[k/2-1]
,这表示a[0]到a[k/2-1]的元素都在a和b合并之后的前k小的元素中。换句话说,a[k/2-1]不可能大于两数组合并之后的第k小值,所以我们可以将其抛弃。
当a[k/2-1]>b[k/2-1]
时存在类似的结论。抛弃b数组的前k/2个元素。
当a[k/2-1]=b[k/2-1]
时,我们已经找到了第k小的数,也即这个相等的元素.
还有一些边界情况:
如果a或者b为空,则直接返回b[k-1]或者a[k-1];
如果k为1,我们只需要返回a[0]和b[0]中的较小值;
如果a[k/2-1]=b[k/2-1]
,返回其中一个
代码如下:
class Solution {
public:
int findK(vector<int>& a, int as, int n, vector<int>& b, int bs, int m, int k) {
if (n > m) return findK(b, bs, m, a, as, n, k);
if (n == 0) return b[bs+k-1];
if (k == 1) return min(a[as], b[bs]);
int l = min(n, k/2);
int r = k - l;
if (a[as+l-1] > b[bs+r-1]) {
return findK(a, as, n, b, bs+r, m-r, k-r);
} else if (a[as+l-1] < b[bs+r-1]){
return findK(a, as+l, n-l, b, bs, m, k-l);
} else {
return a[as+l-1];
}
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n = nums1.size();
int m = nums2.size();
int k = (n+m)/2;
if ((m+n)%2 == 1) {
return findK(nums1, 0, n, nums2, 0, m, k+1);
}
else {
return (findK(nums1, 0, n, nums2, 0, m, k) + findK(nums1, 0, n, nums2, 0, m, k+1)) / 2.0;
}
}
};
原文地址:http://www.cnblogs.com/pk28/
与有肝胆人共事,从无字句处读书。
欢迎关注公众号:
欢迎关注公众号:
![](https://images.cnblogs.com/cnblogs_com/pk28/1069498/o_qrcode_for_gh_db07a03aaa56_344.jpg)
分类:
Leetcode
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· DeepSeek+PageAssist实现本地大模型联网
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· 从 14 秒到 1 秒:MySQL DDL 性能优化实战