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.
解题思路:
The key to solve this problem is moving element of A and B backwards. If B has some elements left after A is done, also need to handle that case.
从后往前填空。九章算法也是这么讲的。
Java code:
1.
public void merge(int[] nums1, int m, int[] nums2, int n) { //from back to front int k = m+n-1; int i = m-1; int j = n-1; for(; i >= 0 && j >= 0; k--) { if(nums1[i] >= nums2[j]) { nums1[k] = nums1[i--]; }else{ nums1[k] = nums2[j--]; } } while(j >= 0) { nums1[k--] = nums2[j--]; } }
2. 九章算法答案 2016.01.18
public class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int i = m-1, j = n-1, index = m + n - 1; while( i >= 0 && j >= 0) { if(nums1[i] > nums2[j]) { nums1[index--] = nums1[i--]; }else { nums1[index--] = nums2[j--]; } } while( j >= 0) { nums1[index--] = nums2[j--]; } } }
Reference:
1. http://www.programcreek.com/2012/12/leetcode-merge-sorted-array-java/
2. http://fisherlei.blogspot.com/2012/12/leetcode-merge-sorted-array.html