LeetCode(4)——Median of Two Sorted Arrays
来源:互联网 发布:解析域名多久生效 编辑:程序博客网 时间:2024/06/05 05:35
Description
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
原题连接
Thought
看到这个题之后第一个想法是合并排序找中位数,但是看到要求时间复杂度在O(log(m+n))就觉得肯定不行。之后的想法是分别取两个数组的最小值,比较出较小的,count++,取较小的后面的值在比较,直到中位数,但是这个复杂度是O(1/2(m+n)),也不能满足要求。后来看了网上大神的思路,如下:
把问题一般化找两个数组nums1,nums2中第k大的数:
用nums1,nums2两个数组的中位数m,n将两个数组进行分割nums11,nums12,nums21,nums22
之后比较m与n的大小,得到以下信息:
若 m > n,则有nums21 < nums12,nums21 < nums22 以及 nums12 > nums11,nums12 > nums21
若 m < n,则有nums11 < nums12,nums11 < nums22 以及 nums22 > nums11,nums22 > nums21
得到的这些比较的作用是在于缩小我们寻找第k大的数的范围:
若 m > n,k > (len(nums1)+len(nums2))/2,那么我们可以知道第k大的数肯定不会出现在nums21中,因此我们只需要在nums1和nums22中寻找第k-len(nums2)/2-1大的数
若 m > n,k < (len(nums1)+len(nums2))/2,那么我们可以知道第k大的数肯定不会出现在nums12中,因此我们只需要在nums11和nums2中寻找第k打的数
n < m 的时候可以做类似讨论
Solution
class Solution(object): def findMedianSortedArrays(self, nums1, nums2): length = len(nums1) + len(nums2) if length % 2 == 0: return (self.findKth(nums1, nums2, length/2)+self.findKth(nums1, nums2, length/2-1))/2.0 else: return self.findKth(nums1, nums2, length/2) def findKth(self, nums1, nums2, k): if not nums1: return nums2[k] if not nums2: return nums1[k] if k == 0: return min(nums1[0], nums2[0]) length1 = len(nums1) length2 = len(nums2) if nums1[length1/2] > nums2[length2/2]: if k > length1/2+length2/2: return self.findKth(nums1, nums2[length2/2+1:], k-length2/2-1) else: return self.findKth(num1s[:length1/2], nums2, k) else: if k > length1/2+length2/2: return self.findKth(nums1[length1/2+1:], nums2, k-length1/2-1) else: return self.findKth(nums1, nums2[:length2/2], k)
- LeetCode(4)——Median of Two Sorted Arrays
- LeetCode — Median of Two Sorted Arrays
- LeetCode—Median of Two Sorted Arrays
- leetcode—Median of Two Sorted Arrays
- LeetCode题解——4Median of Two Sorted Arrays
- leetcode 4——Median of Two Sorted Arrays
- Leetcode 4 Median of Two Sorted Arrays
- LeetCode 4 - Median of Two Sorted Arrays
- Leetcode 4 Median of Two Sorted Arrays
- Leetcode 4 Median of Two Sorted Arrays
- [leetcode 4] Median of Two Sorted Arrays
- LeetCode 4:《Median of Two Sorted Arrays》
- [Leetcode] 4 - Median of Two Sorted Arrays
- leetcode|4|Median of Two Sorted Arrays
- [Leetcode]4Median of Two Sorted Arrays
- leetcode 4 Median of Two Sorted Arrays
- LeetCode #4 Median of Two Sorted Arrays
- LeetCode-4-Median of Two Sorted Arrays
- Axure游戏原型设计实例应用(三)——Einsphoton
- AES自动生成base64密钥加密解密
- JavaScript基础之Node.js与crypto
- 对于数据结构的初步了解
- windows7 update 更新失败卡在界面解决方案
- LeetCode(4)——Median of Two Sorted Arrays
- 实现简单的线程池
- iOS对象引用计数
- Spring整合Dubbo时XML报错解决
- mui
- 数据库数据源(连接池)常见配置项
- Jfreechart-Jfreechart的使用(图表绘制)[柱状图]
- java基本数据类型-基本类型的类型转换
- APP从启动到主页面显示经历了哪些过程