LeetCode 88. 合并两个有序数组

题目:

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

  说明:spa

  • 初始化 nums1nums2 的元素数量分别为 mn
  • 你能够假设 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]

思路:

  两个指针分别指向num1和num2的尾元素,一个结果指针指向结果数组尾(即num1),每次比较两指针较大元素,放到结果指针位置。每轮较大元素指针和结果指针向前移动,直到结果指针到数组首。code

代码:

public class P088 {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int indec1 = m - 1;
        int indec2 = n - 1;
        int indec = m + n - 1;
        while (indec >= 0) {
            if (indec1 < 0) {
                nums1[indec--] = nums2[indec2--];
            } else if (indec2 < 0) {
                nums1[indec--] = nums1[indec1--];
            } else if (nums1[indec1] > nums2[indec2]) {
                nums1[indec--] = nums1[indec1--];
            } else {
                nums1[indec--] = nums2[indec2--];
            }
        }
    }
}