[LeetCode]--88. Merge Sorted Array

原创 2016年10月03日 16:59:02

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.

这个问题假设了nums1这个数组的长度是m+n。我的考虑是,比较之后插入,如果插入就把插入处之后的往后依次挪一个。这个算法通过了。

public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = 0, j = 0;
        while (i < m && j < n) {
            if (nums2[j] < nums1[i]) {
                //这里是m,不能是m-1,因为插入一个之后变长了一个
                for (int p = m; p > i; p--)
                    nums1[p] = nums1[p - 1];
                nums1[i] = nums2[j];
                j++;
                m++;
            }
            i++;
        }
        while (j < n) {
            nums1[i] = nums2[j];
            i++;
            j++;
        }
    }

如果考虑这个题从后面一个个插入,就更简便了,效率大大提高了,不用后移那么多次了。

class Solution {
    /**
     * @param A: sorted integer array A which has m elements, 
     *           but size of A is m+n
     * @param B: sorted integer array B which has n elements
     * @return: void
     */
    public void mergeSortedArray(int[] A, int m, int[] B, int n) {
        int i = m-1, j = n-1, index = m + n - 1;
        while (i >= 0 && j >= 0) {
            if (A[i] > B[j]) {
                A[index--] = A[i--];
            } else {
                A[index--] = B[j--];
            }
        }
        while (i >= 0) {
            A[index--] = A[i--];
        }
        while (j >= 0) {
            A[index--] = B[j--];
        }
    }
}

差别就是,如果n是很短的,第一种就把nums2数组比较完了就不用管了。如果n是很长的,那么显然第二种方式更可取。

版权声明:本文为博主原创文章,转载请声明出处 http://blog.csdn.net/bug_moving

相关文章推荐

(数组)leetcode 88:Merge Sorted Array

(数组)leetcode 88:Merge Sorted Array

LeetCode 88. Merge Sorted Array 归并的过程

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. 题意:对于...

[leetcode]88. Merge Sorted Array (java)

题目描述: Merge two sorted linked lists and return it as a new list. The new list should be made by sp...

Leetcode 88. Merge Sorted Array

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note: Y...

LeetCode 88 — Merge Sorted Array(C++ Java Python)

题目:http://oj.leetcode.com/problems/merge-sorted-array/ Given two sorted integer arrays A and B, mer...

leetcode88---Merge Sorted Array(合并有序数组)

问题描述:Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Not...
  • will130
  • will130
  • 2016年01月14日 18:03
  • 215

[LeetCode]88.Merge Sorted Array

【题目】 Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may a...

【leetcode c++】88 Merge Sorted Array

Merge Sorted Array Given two sorted integer arrays nums1 andnums2, merge nums2 into nums1 as one sor...
  • hqq39
  • hqq39
  • 2015年07月27日 14:27
  • 797

LeetCode 88 Merge Sorted Array(合并排序数组)(*)

翻译给定两个排序的整型数组nums1和nums2,将nums2合并到nums1成一个排序数组。批注: 你可以假设nums1中有足够的空间(空间大于或等于m+n)来存放来自nums2的额外元素。 num...
  • NoMasp
  • NoMasp
  • 2016年01月24日 12:06
  • 3699

LeetCode笔记:88. Merge Sorted Array

合并两个排序好的数组为一个排序好的数组
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode]--88. Merge Sorted Array
举报原因:
原因补充:

(最多只允许输入30个字)