合并两个有序的链表和这题很像,但是合并两个有序的链表可以使用递归来实现,因为链表的结点有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;
}
}
}

京公网安备 11010502036488号