Python 学习-Leetcode 刷题记 2:寻找两个有序数组的中位数

问题: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5

解题思路(暴力方法,并不满足时间复杂度为 O(log(m + n))) )

  1. 将两个列表合并为一个列表;
  2. 将合并后的新列表进行升序排序;
  3. 获取新列表的长度;
  4. 判断新列表的长度是偶数还是奇数,如果是偶数则中位数为新列表中间两个数的平均数;如果是奇数则中位数为新列表中间的那一个数。

解题过程讲解

总结

总的来说,如果这一道题不考虑时间复杂度为 O(log(m + n)) 这一要求,解题方法是比较容易的,没有用到什么复杂的算法,解题思路也比较清晰。但是,如果考虑时间复杂度为 O(log(m + n)) ,这道题的难度就提升很多了,本人还在思考中,有答案后将补充到此,欢迎各位大神指点!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据