最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python尋找兩個有序數(shù)組的中位數(shù)實例詳解

 更新時間:2018年12月05日 10:17:29   作者:A_foreignwuli  
這篇文章主要介紹了Python尋找兩個有序數(shù)組的中位數(shù),本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

Python尋找兩個有序數(shù)組的中位數(shù)

審題:

1.找出意味著這是一個查找算法題

2.算法復(fù)雜度log級別,就是提示你是二分查找

3.二分查找實現(xiàn)一般為遞歸

 (1)遞歸包括遞歸體
 (2)終止條件

思路:

定理:

1.有序數(shù)組中有一半的元素小于等于數(shù)組的中位數(shù),有一半的元素大于等于中位數(shù)(如果數(shù)組中元素個數(shù)是奇數(shù),那么這里的一半并不是嚴(yán)格意義的1/2)

2.如果我們?nèi)サ羝渲幸粋€數(shù)組比中位數(shù)小的k個數(shù),再去掉另一個數(shù)組中比中位數(shù)大的k個數(shù),得到的合并子數(shù)組的中位數(shù)和原來的中位數(shù)相同。

eg:[1,2,3],[1,2,3] => [1,1,2,2,3,3]

根據(jù)定理去除元素[2,3],[1,2] => [1,2,2,3]中位數(shù)沒變。我用了特殊的例子解釋,你可以自行換一個試一試。如果兩個的數(shù)組長度不一樣的時候,不能去掉各自的一半,要去掉相同的個數(shù),下面會細(xì)說

解題思路:

假設(shè)兩個數(shù)組的中位數(shù)分別是a[m1],b[m2]

1.if a[m1] == b[m2] ,那么剛好有一半的元素小于a[m1],那么a[m1]就是要找的中位數(shù)。參考上面的列子

2.if a[m1] < b[m2],根據(jù)定理1可知,這個中位數(shù)只可能出現(xiàn)在a[n1/2 ~ n1-1]或者b[0 ~ n2/2].也就是說合并這兩個數(shù)組的中位數(shù)和原來的數(shù)組合并的數(shù)組的中位數(shù)是一樣的。 根據(jù)定理2可知:

1.數(shù)組長度一樣的時候,去除掉一半是合理的。

2.數(shù)組長度不一樣,這么做中位數(shù)可能發(fā)生變化。解決方案就是去除掉相同個數(shù)的元素。why?假設(shè)n1 < n2, 兩個數(shù)組就去掉n1/2個元素。那就不在是上面的范圍(a[n1/2 ~ n1-1]或者b[0 ~ n2/2]),而是a[n1/2 ~ n1-1]或者b[0 ~ (-n1/2+n2-1)].

結(jié)論就是:只能刪除a的n1/2(向下取整)

3.if a[m1] > b[m2],和上面分析類似,中位數(shù)只能出現(xiàn)在a的前半段或者b的后半段。也就是說a[0 ~ n1/2]和b[n1/2 ~ n2-1]的中位數(shù)和原來的中位數(shù)相同。

參考:LeetCode參考答案

class Solution:
  def findMedianSortedArrays(self, nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: float
    """
    m, n = len(nums1), len(nums2)
    if m > n:
      nums1, nums2, m, n = nums2, nums1, n, m
    if n == 0:
      raise ValueError
    imin, imax, half_len = 0, m, (m + n + 1) // 2
    while imin <= imax:
      i = (imin + imax) // 2
      j = half_len - i
      if i < m and nums2[j-1] > nums1[i]:
        # i is too small, must increase it
        imin = i + 1
      elif i > 0 and nums1[i-1] > nums2[j]:
        # i is too big, must decrease it
        imax = i - 1
      else:
        # i is perfect
        if i == 0: max_of_left = nums2[j-1]
        elif j == 0: max_of_left = nums1[i-1]
        else: max_of_left = max(nums1[i-1], nums2[j-1])
        if (m + n) % 2 == 1:
          return max_of_left
        if i == m: min_of_right = nums2[j]
        elif j == n: min_of_right = nums1[i]
        else: min_of_right = min(nums1[i], nums2[j])
        return (max_of_left + min_of_right) / 2.0

總結(jié)

以上所述是小編給大家介紹的Python尋找兩個有序數(shù)組的中位數(shù),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • matplotlib更改窗口圖標(biāo)的方法示例

    matplotlib更改窗口圖標(biāo)的方法示例

    這篇文章主要介紹了matplotlib更改窗口圖標(biāo)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 如何基于python實現(xiàn)年會抽獎工具

    如何基于python實現(xiàn)年會抽獎工具

    這篇文章主要介紹了如何基于python實現(xiàn)年會抽獎工具,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Python itertools庫高效迭代藝術(shù)實例探索

    Python itertools庫高效迭代藝術(shù)實例探索

    Python 中的?itertools?庫為迭代器操作提供了豐富的工具集,使得處理迭代對象變得更加高效和靈活,本篇文章將深入討itertools庫的常用方法,通過詳實的示例代碼演示其在解決各種問題中的應(yīng)用
    2024-01-01
  • 詳解Python下載圖片并保存本地的兩種方式

    詳解Python下載圖片并保存本地的兩種方式

    這篇文章主要介紹了Python下載圖片并保存本地的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python中使用MySQL模糊查詢的詳細(xì)方法

    Python中使用MySQL模糊查詢的詳細(xì)方法

    這篇文章主要介紹了Python中使用MySQL模糊查詢的方法,以下是一個使用pymysql進(jìn)行模糊查詢的詳細(xì)示例,包括安裝庫、連接數(shù)據(jù)庫、執(zhí)行查詢以及處理結(jié)果,需要的朋友可以參考下
    2024-06-06
  • Python利用手勢識別實現(xiàn)貪吃蛇游戲

    Python利用手勢識別實現(xiàn)貪吃蛇游戲

    想必大家都玩過貪吃蛇的游戲吧:通過操縱蛇的移動方向能夠讓蛇吃到隨機(jī)出現(xiàn)的食物,吃到的食物越多,蛇就會變得越長。本文將使用手勢識別來完成貪吃蛇這個簡單的游戲,感興趣的可以了解一下
    2022-04-04
  • 在Spyder中如何導(dǎo)入項目

    在Spyder中如何導(dǎo)入項目

    文章介紹了在Spyder中導(dǎo)入已存在項目時遇到的錯誤及解決方法,通過創(chuàng)建新項目并復(fù)制`.spyproject`文件夾到已存在項目中,可以成功導(dǎo)入項目,此外,還提到如何在Spyder中顯示項目資源管理器
    2025-01-01
  • python 中值濾波,椒鹽去噪,圖片增強(qiáng)實例

    python 中值濾波,椒鹽去噪,圖片增強(qiáng)實例

    今天小編就為大家分享一篇python 中值濾波,椒鹽去噪,圖片增強(qiáng)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python模塊 _winreg操作注冊表

    Python模塊 _winreg操作注冊表

    通過python操作注冊表主要有兩種方式,一種是通過python的內(nèi)置模塊 _winreg,另一種方式就是 Win32 Extension For Python的win32api模塊,這里主要簡單看看用內(nèi)置模塊 _winreg如何操作注冊表
    2020-02-02
  • Python代碼顯得Pythonic(區(qū)別于其他語言的寫法)

    Python代碼顯得Pythonic(區(qū)別于其他語言的寫法)

    這篇文章主要介紹了Python代碼顯得Pythonic(區(qū)別于其他語言的寫法),對于字符串連接,相比于簡單的+,更pythonic的做法是盡量使用%操作符或者format函數(shù)格式化字符串,感興趣的小伙伴和小編一起進(jìn)入文章了解更詳細(xì)相關(guān)知識內(nèi)容吧
    2022-02-02

最新評論

阿拉尔市| 唐海县| 洮南市| 承德县| 翼城县| 五家渠市| 浦城县| 汝南县| 大同县| 岢岚县| 民权县| 隆林| 河北省| 宝丰县| 延寿县| 濮阳县| 山阴县| 米林县| 雷州市| 定兴县| 安福县| 武胜县| 西城区| 华阴市| 深州市| 当雄县| 溧阳市| 汽车| 左权县| 岳阳县| 汝南县| 本溪| 宣威市| 威远县| 北辰区| 西和县| 晋中市| 织金县| 浦县| 南丹县| 濮阳县|