1. 程式人生 > >LeetCode-4. 兩個排序數組的中位數(詳解)

LeetCode-4. 兩個排序數組的中位數(詳解)

說了 AC problems arr scrip print 奇數 時間復雜度 兩個

鏈接: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;   } }

LeetCode-4. 兩個排序數組的中位數(詳解)