LeetCode - ソートされた配列をマージします

逐語https://www.dazhuanlan.com/2019/08/26/5d63036ee8731/


原題:

2つのソート整数アレイnums1とnums2所与一のソートされた配列としてnums1にnums2をマージします。

注意

あなたはnums1がnums2から追加の要素を保持するのに十分なスペース(大きいまたはM + Nに等しい大きさ)を有していると仮定してもよいです。nums1で初期化要素とnums2の数mおよびnは、それぞれです。

効果の対象に

整数とnums1のnums2の2つの秩序配列を考えると、ソートされた配列としてnums1のnums2にマージされます。

注意を払います

あなたは、他の要素のnums2を保持するnums1十分なスペース(以上、M + Nに等しいサイズ)をとることができます。mおよびnの要素nums1 nums2初期の数。

問題解決のためのアイデア

彼は、尾のマージから始まりました。
コードの実装(Javaの):

      
      
1
2
3
4
5
6
7
8
9
10
11
      
      
クラス {
公共 ボイド マージINT [] nums1、INT M、INT [] nums2、int型 N) {
INT I = mの- 1 、J = N - 1 、インデックス= M + N - 1
一方、 (インデックス> = 0 ){
あれば (私は< 0 || jは< 0
nums1 [index--] =私は< 0はnums2 [j--]:nums1 [i--]。
nums1 [index--] = nums1 [I]> nums2 [j]は?nums1 [i--]:nums2 [j--]。
}
}
}

Python実装:

      
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
      
      
class Solution(object):
def merge(self, nums1, m, nums2, n):
"""
:type nums1: List[int]
:type m: int
:type nums2: List[int]
:type n: int
:rtype: void Do not return anything, modify nums1 in-place instead.
"""
i, j, index = m -1, n -1, m+n -1
while i >= 0 and j >= 0:
if nums1[i] > nums2[j]:
nums1[index] = nums1[i]
私、インデックス= I -1、インデックス -1
nums1 [インデックス] = nums2 [J]
J、インデックス= J -1、インデックス -1
nums1の[:J + 1 ] = nums2 [:J + 1 ]

おすすめ

転載: www.cnblogs.com/petewell/p/11410485.html