逐語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 ]
|