1. 程式人生 > >leetcode4-兩個排序陣列的中位數

leetcode4-兩個排序陣列的中位數

 自己是用陣列寫的,程式碼如下:

int n1=nums1.size();
    int n2=nums2.size();
    int n=n1+n2;
    int *pn=new int[n];
    double dResult;
    for (int i=0;i<n1;i++)
    {
        pn[i]=nums1[i];
    }
    for (int i=0;i<n2;i++)
    {
        pn[i+n1]=nums2[i];
    }
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++)
        {
            if (pn[i]<pn[j])
            {
                int temp=pn[i];
                pn[i]=pn[j];
                pn[j]=temp;
            }
        }
    }
    if ((n%2))
    {
        dResult=pn[n/2];
        return dResult;
    }
    else
    {
        dResult=(double)(pn[n/2]+pn[n/2-1])/2;
        return dResult;
    }

陣列佔用記憶體較大,檢視佔用記憶體小的容器的方法,程式碼如下:

    vector<int>nums;
    int i=0,j=0;
    while((i<nums1.size())&&j<nums2.size())
    {
    if (nums1[i]<nums2[j])
    {
    nums.push_back(nums1[i]);
    i++;
    }
    else
    {
    nums.push_back(nums2[j]);
    j++;
    }
    if (i==nums1.size())
    {
    while(j<nums2.size()){nums.push_back(nums2[j]);j++;}
    } 
    else if (j==nums2.size())
    {
    while(i<nums1.size()){nums.push_back(nums1[i]);i++;}
    }
    if (nums.size()%2)
    {
    return nums[nums.size()/2];
    }
    else
    {
    return (double)(nums[nums.size()/2]+nums[nums.size()/2-1])/2;
    }
    }