4. 尋找兩個有序數組的中位數

給定兩個大小爲 m 和 n 的有序數組 nums1 和 nums2。html

請你找出這兩個有序數組的中位數,而且要求算法的時間複雜度爲 O(log(m + n))。python

你能夠假設 nums1 和 nums2 不會同時爲空。算法

示例 1:數組

    nums1 = [1, 3]
    nums2 = [2]ui

  則中位數是 2.0spa


示例 2:code

    nums1 = [1, 2]
    nums2 = [3, 4]htm

  則中位數是 (2 + 3)/2 = 2.5blog

 

 


 

【參考】leetcode

【leetcode】題解【1

 

 

 

 


 

【實踐】

【1】方法一:直接法

(1)Python

【python技巧】「&」、「>>」等

  【參考】【http://www.javashuo.com/article/p-zsudovyo-hd.html

 

 

from typing import List


class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        m = len(nums1)
        n = len(nums2)
        nums1.extend(nums2)

        nums1.sort()

        if (m + n) & 1: # & 是二進制的與操做,a & 1 至關於判斷a是不是奇數
            return nums1[(m + n - 1) >> 1] # >> 是二進制右移一位,至關於除以2
        else:
            return (nums1[(m + n - 1) >> 1] + nums1[(m + n) >> 1]) / 2

 

【leetcode的其餘算法】

 【以上一些算法的時間複雜度都達不到題目的要求 O(log(m+n)

O(log(m+n)。看到 log,很明顯,咱們只有用到二分的方法才能達到。咱們不妨用另外一種思路,題目是求中位數,其實就是求第 k 小數的一種特殊狀況,而求第 k 小數有一種算法。】

【參考(解法三不錯)】【https://leetcode-cn.com/problems/median-of-two-sorted-arrays/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-w-2/

 

 

 

 

 

 

 

 

 


 

【其餘/補充】

相關文章
相關標籤/搜索