[LeetCode] 88. 合并两个有序数组

题目链接 : https://leetcode-cn.com/problems/merge-sorted-array/

题目描述:

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

说明:

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

示例:

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

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

思路:

一句话解释:用大的值填坑

详细解释:

我们比较两个数组的最大值依次填入!

其实这道题,可以用极端情况考虑,

例如:

nums1 = [4,5,6,0,0,0],nums2 = [1,2,3]

nums1 = [1,2,3,0,0,0],nums2 = [4,5,6]

就可以理解代码了!

代码:

python

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.
        """
        i = m - 1
        j = n - 1
        k = m + n - 1
        while i >= 0 and j >= 0:
            if nums1[i] > nums2[j]:
                nums1[k] = nums1[i]
                i -= 1
            else:
                nums1[k] = nums2[j]
                j -= 1
            k -= 1
        while j >= 0:
            nums1[k] = nums2[j]
            k -= 1
            j -= 1

java

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m - 1;
        int j = n - 1;
        int k = m + n - 1;
        while (i >= 0 && j >= 0) nums1[k--] = (nums1[i] > nums2[j]) ? nums1[i--]:nums2[j--];
        while (j >= 0) nums1[k--] = nums2[j--];   
    }
}

posted on 2019-06-12 21:12  威行天下  阅读(330)  评论(0编辑  收藏  举报

导航