['数组/字符串']
88 合并两个有序数组
题目链接 link
给定的数组是有序的,那么逐个对比放到一个新数组中,最后复制给 nums1 即可。
时间复杂度 \(O(m+n)\)
::: code-tabs
@tab cpp
C++ |
---|
| class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
vector<int> all;
int i = 0, j = 0;
while (i < m && j < n) {
if (nums1[i] < nums2[j]) {
all.push_back(nums1[i]);
i++;
} else {
all.push_back(nums2[j]);
j++;
}
}
while (i < m) all.push_back(nums1[i++]);
while (j < n) all.push_back(nums2[j++]);
nums1 = all;
}
};
|
@tab java
Java |
---|
| class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] all = new int[m + n];
int i = 0, j = 0;
while (i < m && j < n) {
if (nums1[i] < nums2[j]) {
all[i + j] = nums1[i];
i++;
} else {
all[i + j] = nums2[j];
j++;
}
}
while (i < m) {
all[i + j] = nums1[i];
i++;
}
while (j < n) {
all[i + j] = nums2[j];
j++;
}
System.arraycopy(all, 0, nums1, 0, m + n); // 高效复制数组
}
}
|
:::