给出一个有序的整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组
数据范围: ,,
注意:
1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了,且后台会自动将合并后的数组 A 的内容打印出来,所以也不需要自己打印
3. A 数组在[0,m-1]的范围也是有序的
[4,5,6],[1,2,3]
[1,2,3,4,5,6]
A数组为[4,5,6],B数组为[1,2,3],后台程序会预先将A扩容为[4,5,6,0,0,0],B还是为[1,2,3],m=3,n=3,传入到函数merge里面,然后请同学完成merge函数,将B的数据合并A里面,最后后台程序输出A数组
[1,2,3],[2,5,6]
[1,2,2,3,5,6]
import java.util.*; 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) { if (A[i] >= B[j]) { A[k] = A[i]; i--; k--; } else { A[k] = B[j]; k--; j--; } } while (i >= 0) { A[k] = A[i]; i--; k--; } while (j >= 0) { A[k] = B[j]; k--; j--; } } }
public class Solution { public void merge(int A[], int m, int B[], int n) { //如果不能开辟空间,已经指定一个数组有足够的空间了,那么 //我们可以从后面开始修改,从后面开始遍历,从大的开始 if (m == 0 && n == 0) return; int index = m + n - 1; int i = m - 1; int j = n - 1; while (i >= 0 && j >= 0) { if (A[i] < B[j]) A[index--] = B[j--]; else A[index--] = A[i--]; } if (i < 0) { while (j >= 0) { A[index--] = B[j--]; } } return; } }
import java.util.*; 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) { if (A[i] > B[j]) { A[k--] = A[i--]; } else { A[k--] = B[j--]; } } while (j >= 0) { A[k--] = B[j--]; } } }
public void merge(int A[], int m, int B[], int n) { for (int i = m, j = 0 ; i < m + n && j < n ; i++, j++) { A[i] = B[j]; } for (int i = 0 ; i < A.length ; i++) { for (int j = 0 ; j < A.length - 1 - i ; j++) { if (A[j] > A[j + 1]) { int temp = A[j]; A[j] = A[j + 1]; A[j + 1] = temp; } } } }
import java.util.*; public class Solution { public void merge(int A[], int m, int B[], int n) { int p1=m-1; int p2=n-1; int ppp=m+n-1; int cur; while(p1>=0||p2>=0){ if(p1==-1){ cur=B[p2--]; }else if(p2==-1){ cur=A[p1--]; }else if(A[p1]>B[p2]){ cur=A[p1--]; }else{ cur=B[p2--]; } A[ppp--]=cur; } } }
import java.util.*; public class Solution { public void merge(int A[], int m, int B[], int n) { int t=0; while (m != 0 && n != 0) { t = m + n - 1; if (A[m - 1] > B[n - 1]) { A[t] = A[m - 1]; m--; } else { A[t] = B[n - 1]; n--; } } t=m+n-1; if (m == 0 && n != 0) { while (n != 0) { A[t] = B[n - 1]; n--; t--; } } if (n == 0 && m != 0) { while (m != 0) { A[t] = A[m - 1]; m--; t--; } } } }
public class Solution { public void merge(int A[], int m, int B[], int n) { int i = m - 1, j = n - 1, index = m + n - 1; while (i >= 0 && j >= 0) { if (A[i] > B[j]) { A[index--] = A[i--]; } else { A[index--] = B[j--]; } } while (i >= 0) { A[index--] = A[i--]; } while (j >= 0) { A[index--] = B[j--]; } } }
import java.util.*; public class Solution { public void merge(int A[], int m, int B[], int n) { if(A==null||B==null||A.length==0||B.length==0){ return; } int l=0; int r=0; int tempIndex=0; int[] tempArr=new int[m+n]; while(l<m&&r<n){ if(A[l]<=B[r]){ tempArr[tempIndex]=A[l]; l++; }else{ tempArr[tempIndex]=B[r]; r++; } tempIndex++; } while(l<m){ tempArr[tempIndex]=A[l]; l++; tempIndex++; } while(r<n){ tempArr[tempIndex]=B[r]; r++; tempIndex++; } for(int i=0;i<m+n;i++){//注意这里是m+n,m+n才是数组A的长度,而m只是有效的元素个数 A[i]=tempArr[i]; } } }
import java.util.*; public class Solution { //之所以从后往前,是利用元素有序 public void merge(int A[], int m, int B[], int n) { int i = m - 1, j = n - 1, k = m + n - 1; while (j >= 0) { if (i < 0 || B[j] > A[i]) { A[k--] = B[j--]; } else { A[k--] = A[i--]; } } } }
import java.util.*; public class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int n1 = 0,n2 = 0; int[] temp = new int[n+m]; for(int i = 0;i<m+n;i++){ if(n1<m&&n2<n){ if(nums1[n1]<nums2[n2]){ temp[i] = nums1[n1++]; }else{ temp[i] = nums2[n2++]; } }else{ if(n2<n){ temp[i] = nums2[n2++]; } if(n1<m){ temp[i] = nums1[n1++]; } } } for(int k = 0;k<n+m;k++){ nums1[k] = temp[k]; } } }
public void merge(int A[], int m, int B[], int n) { while(n-1>=0){ A[m+n-1] = (m-1<0||A[m-1]<=B[n-1])?B[--n]:A[--m]; } }
public void merge(int A[], int m, int B[], int n) { if(A == null || B == null){ return ; } for(int i = m,j = 0;i<A.length && j<n;i++,j++){ A[i] = B[j]; } Arrays.sort(A); }
import java.util.*; public class Solution { public void merge(int A[], int m, int B[], int n) { int i = m - 1; int j = 0; while (j < B.length) { while (i >= 0 && A[i] > B[j]) { A[i+1] = A[i]; i--; } A[i+1] = B[j]; j++; i = m - 1 + j; } } }