合并两个有序的链表和这题很像,但是合并两个有序的链表可以使用递归来实现,因为链表的结点有next域,数组没有。
但是我们可以看到,合并两个有序的数组合并后的数组也是有序的,这会让我们把思路放到排序算法上。合并两个有序的数组的过程是和归并排序的merge过程很类似
贴一下归并排序的代码
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型一维数组 待排序的数组 * @return int整型一维数组 */ public int[] MySort (int[] arr) { // write code here if(arr==null) return null; sort(arr,0,arr.length-1); return arr; } public void merge(int[] arr,int left,int mid,int right){ int[] help=new int[right-left+1]; int p1=left,p2=mid+1,i=0; while(p1<=mid&&p2<=right){ help[i++]=arr[p1]<arr[p2]?arr[p1++]:arr[p2++]; } while(p1<=mid){ help[i++]=arr[p1++]; } while(p2<=right){ help[i++]=arr[p2++]; } for(i=0;i<help.length;i++){ arr[left+i]=help[i]; } } public void sort(int[] arr,int left,int right){ if(left==right) return; int mid=left+(right-left)/2; sort(arr,left,mid); sort(arr,mid+1,right); merge(arr,left,mid,right); } }我们只需要把merge修改一下就好了,代码如下:
import java.util.*; public class Solution { public void merge(int A[], int m, int B[], int n) { int[] help=new int[m+n]; int p1=0,p2=0,i=0; while(p1<m&&p2<n){ help[i++]=A[p1]<B[p2]?A[p1++]:B[p2++]; } while(p1<m){ help[i++]=A[p1++]; } while(p2<n){ help[i++]=B[p2++]; } i=0; for(int c:help){ A[i++]=c; } } }