主要是体验一下牛客网里的核心代码模式到底是怎么弄的。。还有C++这个东西平常用的太少了,试一试。
以外的还体验到了sort()函数的使用。
来源:牛客网
题目链接:合并两个有序的数组
知识点:数组、双指针
描述
给出一个整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组
数据范围:
注意:
- 保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
- 不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了
- A 数组在[0,m-1]的范围也是有序的
例1:
A: [4,5,6,0,0,0],m=3
B: [1,2,3],n=3
合并过后A为:
A: [1,2,3,4,5,6]
示例1
输入:
[4,5,6],[1,2,3]
返回值:
[1,2,3,4,5,6]
说明:
A数组为[4,5,6],B数组为[1,2,3],后台程序会预先将A扩容为[4,5,6,0,0,0],B还是为[1,2,3],m=3,n=3,传入到函数merge里面,然后请同学完成merge函数,将B的数据合并A里面,最后后台程序输出A数组
示例2
输入:
[1,2,3],[2,5,6]
返回值:
[1,2,2,3,5,6]
思路
主要是体验一下牛客网上的核心代码模式到底是怎么操作的,还有C++。
这题应该算是很简单了,不过居然没有#include<cstring>
就不能用strcat
的方法。本来想一个strcat
和一个sort()
光速解决问题,没想到还是要手动连接。
本质上就是连接之后进行一个排序,注意这里要破坏原数组A,返回值是void(就是说它直接输出你破坏掉的A)。
sort()
的使用:
sort(A, A + m + n);
解题代码
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int i, j;
j = 0;
for (i = m; i < m + n; i++) {
A[i] = B[j];
j++;
}
sort(A, A + m + n);
}
};