【华为OD机试真题】数组拼接 | 机试真题+思路参考+代码解析(C语言、C++、Java、Py、JS)
题目:给定两个已排序的数组,将两个数组拼接成一个新的已排序数组,返回新数组的最小长度。
思路:
- 创建一个新数组,长度为两个原数组长度之和。
- 遍历两个数组,按顺序填入新数组。
- 如果其中一个数组先遍历完,则将另一个数组剩余元素直接复制到新数组尾部。
- 返回新数组的长度。
代码(C语言):
int minArrayLen(int* arr1, int arr1Size, int* arr2, int arr2Size) {
int newLen = arr1Size + arr2Size;
int* newArr = (int*)malloc(sizeof(int) * newLen);
int i = 0, j = 0, k = 0;
while (i < arr1Size && j < arr2Size) {
if (arr1[i] < arr2[j]) {
newArr[k++] = arr1[i++];
} else {
newArr[k++] = arr2[j++];
}
}
while (i < arr1Size) {
newArr[k++] = arr1[i++];
}
while (j < arr2Size) {
newArr[k++] = arr2[j++];
}
return newLen;
}
代码(C++):
class Solution {
public:
int minArrayLen(vector<int>& arr1, vector<int>& arr2) {
vector<int> newArr;
int i = 0, j = 0;
while (i < arr1.size() && j < arr2.size()) {
if (arr1[i] < arr2[j]) {
newArr.push_back(arr1[i++]);
} else {
newArr.push_back(arr2[j++]);
}
}
while (i < arr1.size()) {
newArr.push_back(arr1[i++]);
}
while (j < arr2.size()) {
newArr.push_back(arr2[j++]);
}
return newArr.size();
}
};
代码(Java):
class Solution {
public int minArrayLen(int[] arr1, int[] arr2) {
int i = 0, j = 0;
ArrayList<Integer> newArr = new ArrayList<>();
while (i < arr1.length && j < arr2.length) {
if (arr1[i] < arr2[j]) {
newArr.add(arr1[i++]);
} else {
newArr.add(arr2[j++]);
}
}
while (i < arr1.length) {
newArr.add(arr1[i++]);
}
while (j < arr2.length) {
newArr.add(arr2[j++]);
}
return newArr.size();
}
}
以上代码提供了C语言、C++和Java的版本,都是创建一个新数组,按从小到大的顺序将两个数组的元素填入新数组,并返回新数组的长度。
评论已关闭