【python中寻找两个有序数组的中位数】

简介: 【python中寻找两个有序数组的中位数】

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。


请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。


你可以假设 nums1 和 nums2 不会同时为空。


示例 1:


nums1 = [1, 3]

   nums2 = [2]


则中位数是 2.0


示例 2:


nums1 = [1, 2]

   nums2 = [3, 4]


则中位数是 (2 + 3)/2 = 2.5


参考】


【leetcode】题解【1】


【实践】


【1】方法一:直接法


(1)Python


【python技巧】“&”、“>>”等

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 小数有一种算法。】


相关文章
|
3月前
|
Python
【Leetcode刷题Python】977. 有序数组的平方
解决LeetCode "有序数组的平方" 问题的方法:使用Python内置的快速排序、直接插入排序(但会超时)和双指针技术,并给出了每种方法的Python实现代码。
21 1
【Leetcode刷题Python】977. 有序数组的平方
|
3月前
|
Python
【Leetcode刷题Python】108. 将有序数组转换为二叉搜索树
LeetCode上108号问题"将有序数组转换为二叉搜索树"的Python实现,通过递归选取数组中间值作为根节点,构建高度平衡的二叉搜索树。
25 2
|
3月前
|
Python
【Leetcode刷题Python】26. 删除有序数组中的重复项
本文提供了一种使用快慢指针法在原地删除升序数组中重复元素的Python实现,返回删除后数组的新长度,同时保持元素的相对顺序。
43 0
|
3月前
|
存储 Python
【Leetcode刷题Python】88. 合并两个有序数组
合并两个有序数组的方法:正向双指针法和逆向双指针法,都具有O(m+n)的时间复杂度,但前者的空间复杂度为O(m+n),后者的空间复杂度为O(1),并给出了Python语言的实现代码。
37 0
|
5月前
|
存储 算法 Java
【经典算法】LeetCode 26. 删除有序数组中的重复项:(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 26. 删除有序数组中的重复项:(Java/C/Python3实现含注释说明,Easy)
39 2
|
5月前
|
SQL 算法 数据挖掘
LeetCode 第四题:寻找两个正序数组的中位数 【4/1000 】【python + go】
LeetCode 第四题:寻找两个正序数组的中位数 【4/1000 】【python + go】
|
6月前
|
Python
在Python中计算一组数值数据的中位数
在Python中计算一组数值数据的中位数
241 2
|
6月前
|
C++ 存储
力扣C++|一题多解之数学题专场(1)
力扣C++|一题多解之数学题专场(1)
51 0
力扣C++|一题多解之数学题专场(1)
|
6月前
|
Java Go Python
【Python每日一练】总目录(2023.2.18~5.18)共90篇
【Python每日一练】总目录(2023.2.18~5.18)共90篇
212 0
【Python每日一练】总目录(2023.2.18~5.18)共90篇
|
算法 Python
【力扣算法02】之寻找两个正序数组的中位数 - python
【力扣算法02】之寻找两个正序数组的中位数 - python
147 0