88.合并两个有序数组

题目描述

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

说明:

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

示例:

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

输出: [1,2,2,3,5,6]

题解

思路

双指针:

  1. i指向nums1的末尾,j指向nums2的末尾;

  2. 同时向前遍历,将较大的数放在nums1的末尾,然后i指针向前移动

  3. 检查nums2是否合并完毕,将剩余元素依次置入num1中

C:

1
2
3
4
5
6
7
8
9
10
11
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int k = m + n - 1;
int i = m - 1, j = n - 1;
while (i >= 0 && j >= 0) {
nums1[k--] = nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
}
while (j >= 0) {
nums1[k--] = nums2[j--];
}
}

思路

又该整活了

Python:

1
2
3
4
5
6
7
8
9
10
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
j = 0
for i in range(m, len(nums1)):
nums1[i] = nums2[j]
j += 1
nums1.sort()