- 虽然这道题很简单,但其用到的思想,还是让我忍不住mark下来;
这是我一开始的做法,想法很简单,合在一起,排下序就好;
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i=0,j=0;
for(i=m;i<m+n&&j<n;i++) {
nums1[i]=nums2[j];
j++;
}
Arrays.parallelSort(nums1);
}
但执行时间受不了啊,所以又做了改进;
就是从两个数组的尾部开始比较,大的放在最后,固定长度(m+n),这样就可以免去从头部开始比较,每插一个数字后面的数还要往后挪;
public void merge(int[] nums1, int m, int[] nums2, int n) {
if(m==0||n==0)
{
if(m==0)
{
for(int k=n-1;k>=0;k--)
{
nums1[k]=nums2[k];
}
}
}else{
for (int i = m - 1, j = n - 1; i >= 0 && j >= 0;)
{
if(nums1[i]<=nums2[j])
{
nums1[i+j+1]=nums2[j];
j--;
}else
{
nums1[i+j+1]=nums1[i];
i--;
}
if(i<0&&j>=0)
{
for(int k=j;k>=0;k--)
{
nums1[k]=nums2[k];
}
}
}
}
}
end~
谢谢!