算法分析课每周练习 Median of Two Sorted Arrays
2017-06-26 14:35
441 查看
题目
Median of two sorted arrays
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)).
分析
这种比较搜索类问题,由于搜索树的深度为O(log(N))次,所以算法复杂度最好也是O(log(m+n)),关键在于对搜索树剪枝,快速排除不用比较的部分
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
len1 = len(nums1)
len2 = len(nums2)
if (len1 + len2) % 2 == 1:
return self.getKth(nums1, nums2, (len1 + len2)/2 + 1)
else:
return (self.getKth(nums1, nums2, (len1 + len2)/2) + self.getKth(nums1, nums2, (len1 + len2)/2 + 1)) * 0.5
def getKth(self, nums1, nums2, k):
len1 = len(nums1)
len2 = len(nums2)
if len1 > len2:
return self.getKth(nums2, nums1, k)
if len1 == 0:
return nums2[k - 1]
if k == 1:
return min(nums1[0], nums2[0])
halfOfK = min(k/2, len1)
leftOfK = k - halfOfK
if nums1[halfOfK - 1] <= nums2[leftOfK - 1]:
return self.getKth(nums1[halfOfK:], num
4000
s2, leftOfK)
else:
return self.getKth(nums1, nums2[leftOfK:], halfOfK)
解析
每次比较把不在后k的部分剪掉不比较,再把剪掉的个数从搜索的位次减去,搜索
Median of two sorted arrays
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)).
分析
这种比较搜索类问题,由于搜索树的深度为O(log(N))次,所以算法复杂度最好也是O(log(m+n)),关键在于对搜索树剪枝,快速排除不用比较的部分
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
len1 = len(nums1)
len2 = len(nums2)
if (len1 + len2) % 2 == 1:
return self.getKth(nums1, nums2, (len1 + len2)/2 + 1)
else:
return (self.getKth(nums1, nums2, (len1 + len2)/2) + self.getKth(nums1, nums2, (len1 + len2)/2 + 1)) * 0.5
def getKth(self, nums1, nums2, k):
len1 = len(nums1)
len2 = len(nums2)
if len1 > len2:
return self.getKth(nums2, nums1, k)
if len1 == 0:
return nums2[k - 1]
if k == 1:
return min(nums1[0], nums2[0])
halfOfK = min(k/2, len1)
leftOfK = k - halfOfK
if nums1[halfOfK - 1] <= nums2[leftOfK - 1]:
return self.getKth(nums1[halfOfK:], num
4000
s2, leftOfK)
else:
return self.getKth(nums1, nums2[leftOfK:], halfOfK)
解析
每次比较把不在后k的部分剪掉不比较,再把剪掉的个数从搜索的位次减去,搜索
相关文章推荐
- 【算法分析与设计】【第二周】4.Median of Two Sorted Arrays
- 算法分析与设计丨第三周丨LeetCode(5)——Median of Two Sorted Arrays(Hard)
- 算法练习(3):Median of Two Sorted Arrays
- (算法分析Week4)Median of Two Sorted Arrays[Hard]
- LeetCode算法题目:Median of Two Sorted Arrays
- 算法课第十五周作业 | Median of Two Sorted Arrays
- leetcode:Median of Two Sorted Arrays (找两个序列的中位数,O(log (m+n))限制) 【面试算法】
- Median of Two Sorted Arrays (找两个序列的中位数,O(log (m+n))限制) 【面试算法leetcode】
- Leetcode: Median of Two Sorted Arrays 理解分析
- Leetcode平台上的Median of Two Sorted Arrays题目用Java堆算法实现
- leetcode——finding Median of Two Sorted Arrays题目分析
- 【算法】【Divide and conquer】Median of Two Sorted Arrays
- 【LeetCode-面试算法经典-Java实现】【004-Median of Two Sorted Arrays(两个排序数组的中位数)】
- 【LeetCode算法练习(C语言)】Median of Two Sorted Arrays
- 【算法导论学习-016】两个已排过序的等长数组的中位数(median of two sorted arrays)
- LeetCode Online Judge 题目C# 练习 - Median of Two Sorted Arrays
- 算法第三周Median of Two Sorted Arrays[hard]
- Median_of_Two_Sorted_Arrays(理论支持和算法总结)
- [Leetcode] Median of Two Sorted Arrays
- [Leetcode] Median of Two Sorted Arrays