Leetcode 004 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)).

Subscribe to see which companies asked this question

class Solution{
	public:
		double findKth(vector<int>& nums1, int m, vector<int>::iterator iter1, vector<int>& nums2, int n, vector<int>::iterator iter2, int k) {
			if(m > n) {
				return findKth(nums2, n, iter2, nums1, m, iter1,k);
			}
			if(m == 0) {
				return *(iter2+k-1);
			}
			if(k==1) {
				return min(*iter1, *iter2);
			}

			int pa = min(k/2, m), pb = k-pa;

			if(*(iter1+pa-1) < *(iter2+pb-1)) {
				return findKth(nums1, m-pa, iter1+pa, nums2, n, iter2, k-pa);
			} else if(*(iter1+pa-1) > *(iter2+pb-1)) {
				return findKth(nums1, m, iter1, nums2, n-pb, iter2+pb, k-pb);
			} else {
				return *(iter1+pa-1);
			}
		}
		double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
			int m = nums1.size(), n = nums2.size();
			int total = m+n;

			if(total & 0x1) {
				return findKth(nums1, m, nums1.begin(), nums2, n, nums2.begin(), total/2+1);
			} else {
				return findKth(nums1, m, nums1.begin(), nums2, n, nums2.begin(), total/2)/2+findKth(nums1, m, nums1.begin(), nums2, n, nums2.begin(), total/2+1)/2;
			}
		}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值