前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-4. 两个排序数组的中位数(详解)

LeetCode-4. 两个排序数组的中位数(详解)

作者头像
诺谦
发布2018-04-17 14:50:17
1.1K0
发布2018-04-17 14:50:17
举报
文章被收录于专栏:Linux驱动Linux驱动

链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/description/

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

请找出两个排序数组的中位数并且总的运行时间复杂度为 O(log (m+n)) 。

示例 1:

nums1 = [1, 3]
nums2 = [2]
中位数是 2.0

示例 2:

nums1 = [1, 2]
nums2 = [3, 4]
中位数是 (2 + 3)/2 = 2.5

分析

这道题很简单,题目已经说了两个数组的顺序已经是排序好了,所以我们直接用一个数组,然后将数组 nums1 和 nums2 的前面(nums1Size+nums2Size)/2个数据存进去,然后再将中位数return出来即可

代码如下(使用C方式)

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) 
{
  int s[nums1Size+nums2Size];
  int i,L=0,R=0;
  int j=nums1Size+nums2Size;
  for(i=0;i<=(j/2);)  
  {
    if(L==nums1Size)    //排序数组 nums1已经放置完了 
    {
      while(i<=(j/2)) //直接放 nums2数组
      s[i++]=nums2[R++];    
    }
    else if(R==nums2Size) //排序数组 nums2已经放置完了 
    {
      while(i<=(j/2)) //直接放 nums1数组
      s[i++]=nums1[L++];    
    } 
    else
    { 
      if(nums1[L]<nums2[R])
        s[i++]=nums1[L++];
      else
        s[i++]=nums2[R++];
    }  
 }

//for(L=0;L<i;L++)
// printf("%d ",s[L]);

//printf("\n%d\n",i);

  if(j%2==1)    //奇数个,则只要最中间值 
  {
    return s[i-1] ;
  }
  else
  {
    return (s[i-2]+s[i-1 ])/2.0;
  }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档