题目
给出一个有序的整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组
数据范围:
0≤n,m≤100,
注意:
1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了
3. A 数组在[0,m-1]的范围也是有序的
思路
用三个指针,一个i指向b的末尾,一个j指向A的未扩充的末尾,一个p指向扩充后的A的末尾。同时根据大小更新i、j和p的位置。
代码
python版本:
class Solution:
def merge(self , A, m, B, n):
# write code here
i = m-1
j = n-1
p = m+n-1
while(i>=0 and j>=0):
if(A[i]>B[j]):
A[p] = A[i]
i-=1
p-=1
else:
A[p] = B[j]
j-=1
p-=1
while j>=0:
A[p] = B[j]
j-=1
p-=1
return A
c++版本
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int i = m-1;
int j = n-1;
int p = m+n-1;
while(i>=0 && j>=0){
if(A[i]>B[j]){
A[p--]=A[i--];
}else{
A[p--]=B[j--];
}
}
while(j>=0){
A[p] = B[j];
j--;
p--;
}
}
};
还有一个python代码简洁版的:
先合并,再排序,就是效率不高。
#
#
# @param A int整型一维数组
# @param B int整型一维数组
# @return void
#
class Solution:
def merge(self , A, m, B, n):
# write code here
A[m:] = B
A.sort()
return A