python 合并排序的数组
生活随笔
收集整理的這篇文章主要介紹了
python 合并排序的数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
| 合并排序的數組
給定兩個排序后的數組 A 和 B,其中 A 的末端有足夠的緩沖空間容納 B。
編寫一個方法,將 B 合并入 A 并排序。
初始化 A 和 B 的元素數量分別為 m 和 n。
示例:
輸入:
A = [1,2,3,0,0,0], m = 3
B = [2,5,6], n = 3
輸出: [1,2,2,3,5,6]
說明:
A.length == n + m
|兩種思路題解
# 題解一 class Solution:def merge(self, A: List[int], m: int, B: List[int], n: int) -> None:"""Do not return anything, modify A in-place instead.解題思路: 1.把數組B 追加到數組A的第m個元素的后面2.利用快速排序對數組A進行排序"""A[m:] = Bself.quick_sort(A, 0, m+n-1)def quick_sort(self, A, first, last):# 初始化p, q指針 指向首、尾元素 if first >= last:returnp = firstq = lastwhile q > p:if A[q] >= A[first]:q -= 1elif A[p] < A[first]:p += 1else:A[p], A[q] = A[q], A[p]A[p] = A[first]# 對分割左側的元素排序self.quick_sort(A, first, q-1)self.quick_sort(A, q+1, last)# 題解二 class Solution:def merge(self, A: List[int], m: int, B: List[int], n: int) -> None:"""Do not return anything, modify A in-place instead.解題思路: 逆向雙指針(比較不好理解),下面代碼有詳細注釋"""# 如果m==0 則直接返回Bif m == 0:A[m:] = Bwhile m > 0 and n > 0:# 當B數組元素大時 把當前元素之間放置A數組后面if B[n-1] > A[m-1]:A[m+n-1] = B[n-1]n -= 1 # 向前移動一個單位else:# 當A數組元素比較大的時候,把當前元素調到后面 A[m+n-1] = A[m-1] m -= 1 # 向后移動一個單位# 特殊情況處理 如果A數組元素已經對比結束,退出循環時,B數組中還有未對比的元素,則直接賦值給A元素,以索引進行切割if m == 0: A[:n] = B[:n]總結
以上是生活随笔為你收集整理的python 合并排序的数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python调整数组顺序使奇数位于偶数前
- 下一篇: python 合并两个排序的链表(递归解