首页 > 其他分享 >寻找两个正序数组的中位数

寻找两个正序数组的中位数

时间:2023-04-15 15:36:02浏览次数:37  
标签:正序 中位数 mid merge 数组 nums1 nums2

题目描述

难度困难

给定两个大小分别为 mn 的正序(从小到大)数组 nums1nums2。请你找出并返回这两个正序数组的中位数

算法的时间复杂度应该为 O(log (m+n))

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

提示:

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -106 <= nums1[i], nums2[i] <= 106

解题步骤

归并排序的思想,时间复杂度\(O(m + n)\),空间复杂度\(O(m + n)\)。解法虽然不是最优解,但是解法简单明了,方便理解。

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        m = len(nums1)
        n = len(nums2)
        merge = []
        i, j = 0, 0
        while i < m and j < n:
            if nums1[i] < nums2[j]:
                merge.append(nums1[i])
                i += 1
            else:
                merge.append(nums2[j])
                j += 1
        while i < m:
            merge.append(nums1[i])
            i += 1
        while j < n:
            merge.append(nums2[j])
            j += 1
        mid = (m + n) // 2
        if (m + n) % 2 == 0:
            return (merge[mid] + merge[mid-1]) / 2
        else:
            return merge[mid]

标签:正序,中位数,mid,merge,数组,nums1,nums2
From: https://www.cnblogs.com/crazypigf/p/17321216.html

相关文章

  • js 数组、对象转json 以及json转 数组、对象
    1、JS对象转JSON方式:JSON.stringify(obj)varjson={"name":"iphone","price":666};//创建对象;varjsonStr=JSON.stringify(json);//转为JSON字符串console.log(jsonStr);2、JS数组转JSON//数组转json串vararr=[1,2,3,{a:1}];JSON.st......
  • 数组元素排序(二)
    快速排序(QuickSort)由图灵奖获得者TonyHoare发明,被列为20世纪十大算法之一,是迄今为止所有内排序算法中速度最快的一种,快速排序的时间复杂度为O(nlog(n))。快速排序通常明显比同为O(nlogn)的其他算法更快,因此常被采用,而且快排采用了分治法的思想,所以在很多笔试面试中能经常看到快......
  • json数据按照某一个相同键值进行分类成一个新的二维json数组
    1formatTreeData(checkNodes){2varmap={},3targetData=[];4checkNodes.forEach(item=>{5if(!map[item.groupKey]){6targetData.push({7value:item.groupKey,8label......
  • 删除无效的括号(广度优先搜索、字符串)、计算右侧小于当前元素的个数(树状数组、线段
    删除无效的括号(广度优先搜索、字符串)给你一个由若干括号和字母组成的字符串s,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按任意顺序返回。示例1:输入:s="()())()"输出:["(())()","()()()"]示例2:输入:s="(a)())()"输出:["(a())()","(......
  • js中的数组方法
    js中数组方法大全平常在写代码的时候,我们经常会用到数组这个类型,那么数组到底有多少方法,方法各自的作用又是什么呢?1.toString作用:把数组转换为数组值(逗号分隔)的字符串。示例:Array.toString()2.join作用:将所有数组元素结合为一个字符串。区别与toString,join可以规定分......
  • leetcode:排序数组
    题目描述给你一个整数数组 nums,请你将该数组升序排列。示例1:输入:nums=[5,2,3,1]输出:[1,2,3,5]示例2:输入:nums=[5,1,1,2,0,0]输出:[0,0,1,1,2,5]题目地址:912.排序数组解题思路 这道题目直接告诉你了要排序,关键是选中什么样的排序算法?题目的限制条件是有两个,第......
  • 【剑指 Offer】 66. 构建乘积数组
    【题目】给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B[i]的值是数组A中除了下标i以外的元素的积,即B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入:[1,2,3,4,5]输出:[120,60,40,30,24]来源:力扣(LeetCode)链接:https://leetc......
  • 数组篇
    二分查找力扣题目链接给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4......
  • 关于滚动数组
    一般只能优化掉最外面的一维(当计算状态只用当前和上一行的时候)。因为外层循环是不会回头的,i单调递增,但是内层循环j会到m之后在下一次循环又变回1,也就是说,要反复用到f[...][1],不能滚动数组。注意:这是与程序具体实现算法时的内外层循环有关的,如果内外层循环可以交换,那么就按照新的......
  • 数组
    一维数组的创建和初始化数组是一组相同类型元素的集合。数组的创建方式type_t      arr_name  [const_n]分别对应着数组类型    数组名     数组的元素大小(指定常量表达式)数组的创建例子,创建一个整型数组#define_#include<stdio.h>intmain()......