天天看點

【python】【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))内完成)

舉例:

Example1: 

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

The median is 2.0
           
Example2: 
nums1 = [1, 2]
nums2 = [3, 4]

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

注意:

最終輸出為小數的形式。

二、題目分析

思路:

我的思路比較簡單,就是建立一個m+n長的清單,将原來兩個清單數字整合并排序存入,找下标的中間位置即可。

并判斷長度為奇數或者偶數,在進行不同的操作,并将結果轉化為小數形式。

三、Python代碼

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        
        #建立新清單,并整合兩個輸入清單,之後進行排序
        nums3 = []
        nums3.extend(nums1)
        nums3.extend(nums2)
        nums3.sort()
        
        #判斷nums3的長度為奇數還是偶數并進行取中位數的操作
        if len(nums3) & 1 == 1:
            return nums3[(len(nums3) - 1) / 2]
        else:
            if (nums3[len(nums3) / 2] + nums3[len(nums3) / 2 - 1]) & 1 == 1:
                return float(nums3[len(nums3) / 2] + nums3[len(nums3) / 2 - 1]) / 2
            else:
                return (nums3[len(nums3) / 2] + nums3[len(nums3) / 2 - 1]) / 2

	#注意:1、我沒有将len(nums3)指派給一個中間變量,導緻代碼看起來是很亂的。原因:這樣的代碼減少了Runtime。
	#      若複制給中間變量,則會增加Runtime。
	#      2、奇偶判斷,我用 & 1 而不是 % 2,原因:&操作 相比 %操作減少了Runtime。
           

四、其他

題目連結:https://leetcode.com/problems/median-of-two-sorted-arrays/

Runtime: 92 ms

想法不夠優化,歡迎大家留言交流~