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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39008204/article/details/79968239
上一篇LeetCode 3. Longest Substring Without Repeating Characters
下一篇LeetCode 5. Longest Palindromic Substring
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭