2つのソート配列のpython3のLeetCode 4.中央値
説明
タイトルをクリックして
配列のソートTWOありnums1とnums2それぞれのサイズとN-Mのを。
2つのソート配列の中央値を検索します。全体的な実行時間の複雑さはO(ログ(M + N))であるべきです。
あなたは、想定し得るnums1をしてnums2は両方とも空にすることはできません。
例1:
nums1 = [1,3]
nums2 = [2]
の中央値は2.0であります
例2:
nums1 = [1、2]
nums2 = [3、4]
の中央値は2 = 2.5 /(2 + 3)であります
分析
ただ、これは見始め 難しい質問 が、タイトルを読んだ後、何を、理解して中央値を見つけるために、2つの規則的な配列、二つの配列を与えられたことを話題手段がないような場所を見つけられませんでした、とタイトル例では、被験者がタイトルにラベルを付けることは困難であるのでけれども、中央値であるかを説明するために与えられた、しかし限り、2つの注文の配列が組み合わされると、その後、中央値に戻ります。最近の研究ではPython、C ++、Javaの前に学んだ、前に学習の思考のモードに応じたので、そこPythonのシンプルで書かれた他の誰か、効率的なコードを、行って見て、その後、Pythonのでは達成しようとしていたされているので、それを再起動するという意味ではありません時間は、私が書いたコードを理解するだけでなく、Wuguaiを見て、私は、コードのコメント欄で自分を見てみましょうことができなかった場合は、そのプログラミングのスキルを向上させるために努力し、興味を持っているああ交換することができます。
コードの実装
達成するための第一の方法
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
length = len(nums1) + len(nums2)
flag = length % 2
res = []
j = 0
k = 0
while j < len(nums1) and k < len(nums2):
if nums1[j] < nums2[k]:
res.append(nums1[j])
j += 1
else:
res.append(nums2[k])
k += 1
while j < len(nums1):
res.append(nums1[j])
j += 1
while k < len(nums2):
res.append(nums2[k])
k += 1
result = 0.
if flag == 0:
result = (res[length // 2] + res[length // 2 - 1]) / 2.
else:
result = res[length // 2]
return result
達成するための第二の方法
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
length = len(nums1) + len(nums2)
res = []
while nums1 and nums2:
res.append(nums1.pop(0) if nums1[0] < nums2[0] else nums2.pop(0))
if nums1:
res += nums1
else:
res += nums2
if length % 2 == 0:
result = (res[length // 2 - 1] + res[length // 2]) / 2.
else:
result = res[length // 2] * 1.
return result
動作して結果を比較します
図から実行するよりもカプセル化されたPythonのメソッドの使用を見ることができたり、独自の効率的を書くために、その外部でホイールを繰り返さないようにしましたが、巨人の肩の上に立つことを学びます。
あなたは他の方法や問題がある場合はOK!私は、コメントエリアにしてくださいシェアを行っています。