Leetcode4-寻找两个正序数组的中位数原理及代码实现
生活随笔
收集整理的這篇文章主要介紹了
Leetcode4-寻找两个正序数组的中位数原理及代码实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
LeetCode4 hard
題目
尋找兩個正序數(shù)組的中位數(shù)
給定兩個大小為m和n的正序(從小到大)數(shù)組nums1和nums2.請你找出這兩個正序數(shù)組的中位數(shù),并且要求算法時間復(fù)雜度為O(log(m+n)).
解題思路
1. 簡單算法 O(m+n)
將兩個數(shù)組合并成一個,利用自帶的排序函數(shù)使合并后的數(shù)組有序。根據(jù)下標(biāo)返回中位數(shù)。但這樣時間復(fù)雜度是O(m+n),不符合題目要求。
class Solution:#64ms 33.73% O(m+n)def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:nums1.extend(nums2)nums1.sort()length=len(nums1)if length%2==0:return (nums1[length//2-1]+nums1[length//2])/2return nums1[length//2]2. 二分法 O(log(m+n))
如果對時間復(fù)雜度要求有l(wèi)og,通常需要用到二分查找。
尋找中位數(shù)的問題實質(zhì)上是尋找第k小的數(shù)。我們比較兩個數(shù)組中第k/2小的數(shù),較小的數(shù)及他之前的數(shù)一定不會是第k小的數(shù),這樣我們每次比較可以排除一半的數(shù),達到了O(log(m+n))的時間復(fù)雜度。當(dāng)然,有一些特殊情況需要單獨考慮。
總結(jié)
以上是生活随笔為你收集整理的Leetcode4-寻找两个正序数组的中位数原理及代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Latex图表总结
- 下一篇: LeetCode5-最长回文子串原理及P