代码:就是合并
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int []tmp=new int[m+n];//申请一个新的数组,用来存放临时的数
int i=0;//临时
int index1=0,index2=0;//第一个、第二个数组移动的下标表示
while(index1<m&&index2<n){//最重要
if(nums1[index1]<=nums2[index2]){
tmp[i]=nums1[index1];
index1++;
}else{
tmp[i]=nums2[index2];
index2++;
}
i++;//下标移动
}
//如果没有存放完,接着执行,下面两个只会执行一个
for(int j=index1;j<m;j++){
tmp[i++]=nums1[j];
}
for(int j=index2;j<n;j++){
tmp[i++]=nums2[j];
}
//赋值回原来的数组中
for(i=0;i<m+n;i++){
nums1[i]=tmp[i];
}
}
}
看一下大佬的解法--三种。。。。。无语了
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
System.arraycopy(nums2, 0, nums1, m, n);
Arrays.sort(nums1);
}
}
//我的也是这种思路,他的真简洁
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
// Make a copy of nums1.
int [] nums1_copy = new int[m];
System.arraycopy(nums1, 0, nums1_copy, 0, m);
// Two get pointers for nums1_copy and nums2.
int p1 = 0;
int p2 = 0;
// Set pointer for nums1
int p = 0;
// Compare elements from nums1_copy and nums2
// and add the smallest one into nums1.
while ((p1 < m) && (p2 < n))
nums1[p++] = (nums1_copy[p1] < nums2[p2]) ? nums1_copy[p1++] : nums2[p2++];
// if there are still elements to add
if (p1 < m)
System.arraycopy(nums1_copy, p1, nums1, p1 + p2, m + n - p1 - p2);
if (p2 < n)
System.arraycopy(nums2, p2, nums1, p1 + p2, m + n - p1 - p2);
}
}
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
// two get pointers for nums1 and nums2
int p1 = m - 1;
int p2 = n - 1;
// set pointer for nums1
int p = m + n - 1;
// while there are still elements to compare
while ((p1 >= 0) && (p2 >= 0))
// compare two elements from nums1 and nums2
// and add the largest one in nums1
nums1[p--] = (nums1[p1] < nums2[p2]) ? nums2[p2--] : nums1[p1--];
// add missing elements from nums2
System.arraycopy(nums2, 0, nums1, 0, p2 + 1);
}
}