Given two sorted integer arrays nums1 and nums2, merge nums2 intonums1 as one sorted array.
Note:
You may assume that nums1 has enough space (size that is greater or equal tom +n) to hold additional elements fromnums2. The number of elements initialized innums1 andnums2 arem and
n respectively.
出处:http://www.programcreek.com/2012/12/leetcode-merge-sorted-array-java/
倒着存入数组nums1,你怎么就没有这个思维呢。真是的。因为nums1后边的空着的啊,所以就倒着装啊,切记切记切记
public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
while(m>0&&n>0){
if(nums1[m-1]>nums2[n-1]){
nums1[n+m-1]=nums1[m-1];
--m;
}
else{
nums1[n+m-1]=nums2[n-1];
--n;
}
}
while(n>0){
nums1[n+m-1]=nums2[n-1];
--n;
}
}
}
public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i=m-1;
int j=n-1;
int k=n+m-1;
while(k>=0){
if(j<0 || (i>=0 && nums1[i]>nums2[j])) nums1[k--]=nums1[i--];
else nums1[k--]=nums2[j--]; //这种j--的写法很不错
}
}
}
上边两种写法的结合
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int i=m-1;
int j=n-1;
int k=m+n-1;
while(i>=0 && j>=0) A[k--] = A[i] > B[j] ? A[i--] : B[j--];
while(j>=0) A[k--] = B[j--];
}
}