logn+m复杂度找两个有序数列的中位数

class Solution {
public:
    double fun(vector<int> nums1,int n,vector<int> nums2,int m,int k)
    {
        if(nums1.size()-n>nums2.size()-m) return fun(nums2,m,nums1,n,k);
        if(n==nums1.size()) return nums2[k-1+m];
        if(k==1) return min(nums1[n],nums2[m]);
        int pa=min(k/2,(int)nums1.size()-n),pb=k-pa;
        if(nums1[pa-1+n]<nums2[pb-1+m]) return fun(nums1,n+pa,nums2,m,k-pa);
        if(nums1[pa-1+n]>nums2[pb-1+m]) return fun(nums1,n,nums2,m+pb,k-pb);
        return nums1[pa-1+n];
    }
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int tot=nums1.size()+nums2.size();
        if(tot&1) return fun(nums1,0,nums2,0,tot/2+1);
        return (fun(nums1,0,nums2,0,tot/2)+fun(nums1,0,nums2,0,tot/2+1))/2;
    }
};
时间: 2024-08-04 14:19:23

logn+m复杂度找两个有序数列的中位数的相关文章

LeetCode--004--寻找两个有序数组的中位数(java)

转自https://blog.csdn.net/chen_xinjia/article/details/69258706 其中,N1=4,N2=6,size=4+6=10. 1,现在有的是两个已经排好序的数组,结果是要找出这两个数组中间的数值,如果两个数组的元素个数为偶数,则输出的是中间两个元素的平均值. 2,可以想象,如果将数组1随便切一刀(如在3和5之间切一刀),数组1将分成两份,数组1左别的元素的个数为1,右边的元素的个数为3. 由于数组1和数组2最终分成的左右两份的个数是确定的,都是所有

两组有序数列的中位数

两组升序排列的数组A[m]和B[n], 求他们的中位数. 注意,中位数的概念哦-相信你会百度一下的- 格式: 第一行输入数字m,接下来一行输入数组A[m], 第三行输入数字n,第四行输入数组B[n],接下来输出中位数.两个数组的长度都不超过1000. 注意,需要保留5位小数哦-所以,你设计函数的时候请设计成double类型哦- 样例输入 1 3 5 1 2 4 5 6 样例输出 3.50000 package jsk; import java.util.Scanner; public class

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 示例 1: nums1 = [1, 3] nums2

『嗨威说』算法设计与分析 - 算法第二章上机实践报告(二分查找 / 改写二分搜索算法 / 两个有序序列的中位数)

本文索引目录: 一.PTA实验报告题1 : 二分查找 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 改写二分搜索算法 2.1 实践题目 2.2 问题描述 2.3 算法描述 2.4 算法时间及空间复杂度分析 三.PTA实验报告题3 : 两个有序序列的中位数 3.1 实践题目 3.2 问题描述 3.3 算法描述 3.4 算法时间及空间复杂度分析 四.实验心得体会(实践收获及疑惑) 一.PTA实验报告题1 : 二分查找 1.1 实践

【LeetCode】4. 寻找两个有序数组的中位数

给定两个大小为 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 分析:给定两个有序的数组,求中位数,难度系数给的是 Hard,希望的复杂度是 lo

《LeetCode-0004》 寻找两个有序数组的中位数-Median of Two Sorted Arrays

题目给定两个大小为 m 和 n 的有序数组nums1和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 示例 1: nums1 = [1, 3]nums2 = [2] 则中位数是 2.01234示例 2: nums1 = [1, 2]nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.51234概念中位数的概念:对于有限的数集,可以通过把所有观察值高低排序后找出正中间

leetcode第四题:两个有序数组的中位数

给定两个大小为 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 代码如下: def median(A, B): m, n = len(A), le

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

题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.          请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).          你可以假设 nums1 和 nums2 不会同时为空.          示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 var findMedianSortedArrays = function(nums1, nums2) { var arr = Array

leetcode刷题四&lt;寻找两个有序数组的中位数&gt;

给定两个大小为 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 思路简单直接撸代码吧 double findMedianSortedArrays(