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 two sorted arrays. The overall run time complexity should be O(log (m+n)).

Example 1:

nums1 = [1, 3]
nums2 = [2]

The median is 2.0

Example 2:

nums1 = [1, 2]
nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5


C/C++

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
    double sum = 0.0;
    int total = nums1Size + nums2Size;
    int pos2 = total / 2;
    int pos1 = pos2 - (total%2==0);
    int i = 0,s1 = 0,s2 = 0;
    while(s1<nums1Size&&s2<nums2Size&&i<=pos2)
    {
        int tmp = nums1[s1]<nums2[s2]?nums1[s1++]:nums2[s2++];
        if(i>=pos1)sum+=tmp;
        ++i;
    }
    while(s1<nums1Size&&i<=pos2)
    {
        if(i>=pos1)sum+=nums1[s1];
        ++s1;
        ++i;
    }
    while(s2<nums2Size&&i<=pos2)
    {
        if(i>=pos1)sum+=nums2[s2];
        ++s2;
        ++i;
    }
    return pos1==pos2?sum:sum*5/10;
}

Java

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        double sum = 0.0;
    int nums1Size = nums1.length;
    int nums2Size = nums2.length;
    int total = nums1Size + nums2Size;
    int pos2 = total / 2;
    int pos1 = pos2 - (total%2==0?1:0);
    int i = 0,s1 = 0,s2 = 0;
    while(s1<nums1Size&&s2<nums2Size&&i<=pos2)
    {
        int tmp = nums1[s1]<nums2[s2]?nums1[s1++]:nums2[s2++];
        if(i>=pos1)sum+=tmp;
        ++i;
    }
    while(s1<nums1Size&&i<=pos2)
    {
        if(i>=pos1)sum+=nums1[s1];
        ++s1;
        ++i;
    }
    while(s2<nums2Size&&i<=pos2)
    {
        if(i>=pos1)sum+=nums2[s2];
        ++s2;
        ++i;
    }
    return pos1==pos2?sum:sum*5/10;
    }
}

Python

class Solution:
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        s = 0.0
        nums1Size = len(nums1)
        nums2Size = len(nums2)
        total = nums1Size + nums2Size
        pos2 = total // 2
        pos1 = pos2-1 if total%2==0 else pos2
        i,s1,s2 = 0,0,0
        while s1<nums1Size and s2<nums2Size and i<=pos2:
            tmp = nums1[s1]
            if nums1[s1]>nums2[s2]:
                tmp = nums2[s2]
                s2 += 1
            else: s1 += 1
            if i>=pos1:s += tmp
            i += 1
        while s1<nums1Size and i<=pos2:
            if i>=pos1:s += nums1[s1]
            s1 += 1
            i += 1
        while s2<nums2Size and i<=pos2:
            if i>=pos1:s += nums2[s2]
            s2 += 1
            i += 1
        return s if pos1==pos2 else s*5/10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值