首页 > 其他 > 详细

Leetcode-88-Merge Sorted Array

时间:2015-08-27 02:29:57      阅读:178      评论:0      收藏:0      [点我收藏+]

Merge Sorted Array

?

?

来自 <https://leetcode.com/problems/merge-sorted-array/>

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?nums1and?nums2?are?m?and?n?respectively.

?

题目解读:

给定两个整型数组nums1?和nums2,将数组nums2中的元素归并到数组nums1中。题目已经假设数组nums1?中拥有足够的空降将数组nums2?中的元素加入到其中。

?

解析:

?

方法一:按照最常规的方法从前往后归并。申请一个空间为m+n的数组nums3?,将两个数组中的元素归并到数组nums3?中,程序结束时再将数组nums3?中的元素复制到数组nums1?中。此方法必须申请额外的空间来存储数组nums3?,并且在还得数组nums3?中的数据复制到数组nums1?中,此方法拥有较高的时间和空间复杂度。

?

方法二:

?

从后向前归并。由于数组nums1?拥有足够的空间可以容纳m+n个元素,则可以利用nums1中的空间进行从后向前归并。i记录nums1中最后一个元素的位置,j记录nums2中最后一个元素的位置,k记录两个数组归并后最后一个元素的位置。图解如下图所示


bubuko.com,布布扣
?

?

Java 代码

public void merge(int[] nums1, int m, int[] nums2, int n) {
		if((nums1==null) && (nums2==null))
			return;
		/**
		 * 记录nums1中最后一个元素的位置
		 */
        int i = m-1;
        /**
         * 记录nums2中最后一个元素的位置
         */
        int j = n-1;
        /**
         * 记录归并结束后最后一个元素的位置
         */
        int k = m+n-1;
        while ((i>=0) && (j>=0)) {
        	if(nums1[i] > nums2[j]) {
        		nums1[k--] = nums1[i--];
        	} else {
        		nums1[k--] = nums2[j--];
        	}
        }
        
        //add remains elements to result
        while(j>=0) {
        	nums1[k--] = nums2[j--];
        }
        for(int a: nums1)
			System.out.print(a + ",");
    }

?算法性能


bubuko.com,布布扣
?

Leetcode-88-Merge Sorted Array

原文:http://972459637-qq-com.iteye.com/blog/2238044

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!