一、題目描述
題目原文:
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:
Example2:nums1 = [1, 3] nums2 = [2] The median is 2.0
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
想法不夠優化,歡迎大家留言交流~