前言
最近在家闲着无聊看爱情公寓5,看上瘾了发现两天没刷题了,不好,所以去leetcode看了一下,找到一道比较有意思的题目(寻找两个有序数组的中位数),尝试做了一下,暴力解法还是挺简单的,二分法也比较有意思。所以来试着讲解一下(哈哈哈)
题目描述
暴力思路
先申请一个长度为nums1.length+nums2.length的辅助数组,然后利用归并排序的合并算法将两个数组合并成一个数组,并且是有序的数组。若长度为奇数,则中位数就是数组长度/2;若长度为偶数,则中位数就是数组长度/2和数组长度/2 - 1之和除以2。
代码
1 | package leetcode; |
通过截图
复杂度分析
- 时间复杂度:O(M+N),M是第一个数组的长度,N是第二个数组的长度
- 空间复杂度:O(M+N),因为申请了一个辅助数组长度为M+N
二分解法代码(加注释)
1 | package leetcode; |
通过截图
复杂度分析
- 时间复杂度:O(log(M,N))
- 空间复杂度:O(1)
PS:该解法参考leetcode上的官方解法加上一些注释。