10.01 leetcodeの面接の質問。ソートされた配列をマージ(パイソン)

方法:コンテンツBは、残りの空間Aに直接コピーされ、その後、ソートA急速なアプリケーションです。
時間複雑:O(M + N)ログ (M + n)は
次のようにコードがあります。

class Solution:
    def merge(self, A, m, B, n):

    	A[m:] = B
    	A.sort()
    	return A

方法2:二重ポインタ
二つのポインタを使用して、新しい配列に2つのサイズ、小さなソートの配列要素の先頭から、二つの配列AおよびBを指している。
コードは以下の通りであります:

class Solution:
    def merge(self, A, m, B, n):



    	a = 0
    	b = 0
    	sort = []

    	while a < m or b < n:

    		if a == m:

    			sort.append(B[b])
    			b += 1

    		elif b == n:
    			sort.append(A[a])
    			a += 1

    		elif A[a] <= B[b]:

    			sort.append(A[a])
    			a += 1

    		else:

    			sort.append(B[b])
    			b += 1



    	A[:] = sort
    	return A

方法3:(インサイチュ改変、追加の記憶空間における)逆二重ポインタ
配列Aと配列Bのために配置されたポインタA、Bです。配列Aの最後の要素への初期点、すなわちA =配列Bの最後の要素、すなわち、B = N-1までのM-1、Bは、最初のポイント、素子サイズへのポインタ要素及びbポインタを比較し、大きいです要素(すなわち、M + N-1位)の位置に最もアレイ。挿入要素の順序と。

コードは以下の通りであります:

class Solution:
    def merge(self, A, m, B, n):

    	a, b = m - 1, n - 1

    	tail = m + n - 1



    	while a >=0 or b >= 0:

    		if a == -1:
    			A[tail] = B[b]
    			b -= 1
    			# n -= 1
    		elif b == -1:
    			A[tail] = A[a]
    			a -= 1
    			# m -= 1



    		elif A[a] <= B[b]:

    			
    			A[tail] = B[b]
    			b -= 1
    			# n -= 1

    		else:
    			A[tail] = A[a]
    			a -= 1
    			# m -= 1
    		
    		tail -= 1


    	return A
公開された100元の記事 ウォンの賞賛3 ビュー10000 +

おすすめ

転載: blog.csdn.net/cy_believ/article/details/104648559