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)).

思路

要求出兩個有序數組(長度分別爲m和n)的中位數,並且要求時間複雜度爲O(log (m+n))。可以利用歸併排序的思想,將兩個數組歸併排序爲一個有序數組,然後取中位數即可。但這樣做出來的時間複雜度好像是O(m+n),不知爲什麼仍然通過了= =,就先把代碼貼出來吧,以後想到更符合的算法再改進。

代碼

Python

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        nums = []
        i,j = 0,0
        for k in range(len(nums1) + len(nums2)):
            if (i < len(nums1)) & (j < len(nums2)):
                if nums1[i] < nums2[j]:
                    nums.append(nums1[i])
                    i += 1
                else:
                    nums.append(nums2[j])
                    j += 1
            elif i < len(nums1):
                nums.append(nums1[i])
                i += 1
            elif j < len(nums2):
                nums.append(nums2[j])
                j += 1
        if(len(nums)%2):
            return float(nums[len(nums)/2])
        else:
            return (nums[len(nums)/2 - 1] + nums[len(nums)/2])/float(2)


Java

public class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int[] nums = new int[nums1.length + nums2.length];
        int i = 0;
        int j = 0;
        for(int k = 0;k < nums1.length + nums2.length;++k)
        {
            if(i < nums1.length && j < nums2.length)
            {
                if(nums1[i] < nums2[j])
                {
                    nums[k] = nums1[i];
                    ++i;
                }
                else
                {
                    nums[k] = nums2[j];
                    ++j;
                }
            }
            else if(j < nums2.length)
            {
                nums[k] = nums2[j];
                ++j;
            }
            else if(i < nums1.length)
            {
                nums[k] = nums1[i];
                ++i;
            }
        }
        
        if(nums.length%2 == 1)
            return (double)nums[(nums.length-1)/2];
        else
            return (nums[nums.length/2-1] + nums[nums.length/2])/((double)2);
    }
}


發佈了39 篇原創文章 · 獲贊 17 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章