4.Median of Two Sorted Arrays

原创 2016年08月31日 20:17:56

最简单的解决方法:

time: o(m+n)

space: o(m+n)


实现思路:生成m和n合并得到的排序数组,然后直接取对应的元素即可。

 public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int len1=nums1.length;
        int len2=nums2.length;
        int[] nums=new int[len1+len2];
        int i=0,j=0,k=0;
        while(i<len1&&j<len2){
            if(nums1[i]<nums2[j]){
                nums[k++]=nums1[i];
                i++;
            }else{
                nums[k++]=nums2[j];
                j++;
            }
        }
        while(i<len1){
            nums[k++]=nums1[i++];
        }
        
        while(j<len2){
            nums[k++]=nums2[j++];
        }
        if((len1+len2)%2==0)
            return (double)(nums[(len1+len2)/2]+nums[(len1+len2)/2-1])/2;
        else
            return (double)nums[(len1+len2)/2];
    }

改进:实现2分法;将原问题转换为求第k个最小元素的问题。在求解过程中,比较2个数组中第K/2个元素的大小,然后删掉确保处于k以内的元素;在最好情况下,每次去掉k/2个元素,k=(m+n)/2;即最终时间复杂度为O(log(m+n))

 

 public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int len1=nums1.length;
        int len2=nums2.length;
      
        int k=(len1+len2)/2;
        if((len1+len2)%2==0){
            return (findkth(nums1,0,len1,nums2,0,len2,k)+findkth(nums1,0,len1,nums2,0,len2,(k+1)))/2;
        }else
            return findkth(nums1,0,len1,nums2,0,len2,k+1);
    }
    //start1开始下表,m元素表示a数组个数
    public double findkth(int[] a,int start1,int m,int[] b,int start2,int n,int k){
        if(m>n)//保证第一个数组元素个数要小于第二个数组
            return findkth(b,start2,n,a,start1,m,k);
        if(m==0)
            return b[start2+k-1];
        if(k==1)
            return a[start1]<b[start2]?a[start1]:b[start2];
        int i=m<k/2?m:k/2;
        if(a[start1+i-1]<b[start2+k-i-1])
            return findkth(a,start1+i,m-i,b,start2,n,k-i);
        else if(a[start1+i-1]>b[start2+k-i-1])
            return findkth(a,start1,m,b,start2+k-i,n-k+i,i);
        else
            return a[start1+i-1];
       
    }


版权声明:本文为博主原创文章,未经博主允许不得转载。

leetcode: 4. Median of Two Sorted Arrays (java)

题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays/ 题目: There are two sorted arrays nu...
  • j754379117
  • j754379117
  • 2016年06月20日 20:44
  • 563

leetcode之 median of two sorted arrays

这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉。后来搜了一下leetcode的难度分布表(leetc...
  • yutianzuijin
  • yutianzuijin
  • 2013年09月10日 00:15
  • 78626

《LeetBook》leetcode题解(4): Median of Two Sorted Arrays[H]——两个有序数组中值问题

004. Median of Two Sorted Arrays[H]Median of Two Sorted ArraysH 题目 分析 思路1 思路2 预备知识 先解释下割 双数组找第k个元素 我...
  • hk2291976
  • hk2291976
  • 2016年04月09日 21:24
  • 2730

两个有序数组的中位数Median of Two Sorted Arrays(很重要)

https://leetcode.com/problems/median-of-two-sorted-arrays/ 对于一个长度为n的已排序数列a,若n为奇数,中位数为a[n / 2 + 1]...
  • gao1440156051
  • gao1440156051
  • 2016年06月21日 11:11
  • 3714

Median of Two Sorted Arrays 两个有序数组的中位数@LeetCode

超级难的一道题,线性时间复杂度好做,就是merge。 但是对数复杂度,就要用到很多数学分析,实际上就是要找到第k小的元素。 翻遍了网络,觉得还是这一篇讲的最详细,而且写得代码最容易转为Java,因为J...
  • hellobinfeng
  • hellobinfeng
  • 2013年12月16日 13:52
  • 4686

LeetCode(4)Median of Two Sorted Arrays

题目There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the t...
  • fly_yr
  • fly_yr
  • 2015年08月22日 20:35
  • 1213

leetcode04-Median of Two Sorted Arrays-python

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two...
  • summerdj
  • summerdj
  • 2016年03月31日 15:11
  • 791

LeetCode(40) Median of Two Sorted Arrays (两排序数组中位数)

题目描述There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the...
  • angelazy
  • angelazy
  • 2015年09月22日 21:18
  • 1232

4.Median of Two Sorted Arrays

There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted ...
  • wscdylzjy
  • wscdylzjy
  • 2015年03月19日 19:57
  • 198

leetcode之Median of Two Sorted Arrays问题

问题描述: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of t...
  • xu2645318400
  • xu2645318400
  • 2017年06月29日 18:49
  • 170
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4.Median of Two Sorted Arrays
举报原因:
原因补充:

(最多只允许输入30个字)