LeetCode004——两个排序数组的中位数

本文探讨了两种解决LeetCode 004问题的方法,即如何在两个已排序数组中找到中位数。思路一采用双指针遍历,时间复杂度为O(m+n),而思路二通过转换问题为求第k小元素,利用二分查找实现O(log(m+n))的时间复杂度。虽然思路二更优,但实际运行时间可能受常数因素影响。
摘要由CSDN通过智能技术生成

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/description/

题目描述:

知识点:二分查找,分治算法

思路一:设两个指针依次从小到大遍历两个有序数组,得到中位数

这是我的第一个想法,求中位数不就是求中间那个数吗?而给我们的又是两个有序数组,我们完全可以设两个指针分别遍历两个数组,将其值存入另一个数组中。

这里需要注意的是中位数的下标值问题,我们假设nums1数组的长度为n1,nums2数组的长度为n2,假设将nums1数组和nums2数组合并成一个数组,那么该数组的长度为n1 + n2,我们要求的中位数就是该新数组中的中位数。

如果n1 + n2是一个偶数,那么我们要求的中位数是两个数的平均值,这两个数的下标为(n1 + n2) / 2和(n1 + n2) / 2 - 1。

如果n1 + n2是一个奇数,那么我们要求的中位数就是一个数,该数的下标为(n1 + n2) / 2。

因此我们设合并数组的长度的时候完全没必要将其设为n1 + n2,只需设为(n1 + n2) / 2 + 1即可。

对于这样的解法,时间复杂度是O(m + n)级别的,其中m表示nums1数组的长度,n表示nums2数组的长度,显然不满足题目要求的O(log(m + n))的时间复杂度的要求。但我们还是可以把这个解法当作一个思路,而且这个解法在LeetCode中是能够得到通过的。

JAVA代码:

public class Solution {

	public double findMedianSortedArrays(int[] nums1, int[] nums2) {
		int n1 = nums1.length;
		int n2 = nums2
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值