88 合并两个有序数组

本文最后更新于:2021年1月13日 晚上

给你两个有序整数数组 nums1nums2,请你将 nums2 合并到 nums1使 nums1 成为一个有序数组。

初始化 nums1nums2 的元素数量分别为 mn 。你可以假设 nums1 有足够的空间(空间大小等于 m + n)来保存 nums2 中的元素。

示例 1:

1
2
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]

示例 2:

1
2
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]

提示:

  • 0 <= m, n <= 200
  • 1 <= m + n <= 200
  • nums1.length == m + n
  • nums2.length == n
  • -109 <= nums1[i], nums2[i] <= 109

Solution

  • 合并后排序
1
2
3
4
5
6
7
8
9
10
11
// @lc code=start
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for(int num: nums2){
nums1[m++] = num;
}
sort(nums1.begin(),nums1.end());
}
};
// @lc code=end
  • 双指针
  1. 对于 nums1 从后往前确定两组中该用哪个数字
  2. 分别从 nums1 和 nums2 的尾元素进行对比,哪个大就放置到最终位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i=n-1;
int j=m-1;
int k = m+n-1;
while(i>-1){
while (j>=0 && nums1[j] > nums2[i])
{
nums1[k--] = nums1[j--];
}
nums1[k--] = nums2[i--];
}
}
};

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!