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--];
            }
        }
    }
}
相關文章
相關標籤/搜索