我们为两个数组分别设置一个指针 p1与 p2来作为队列的头部指针,p1作为nums1的指针,p2作为nums1的指针,从两数组坐标0,开始比大小,谁小谁的数组坐标下的数,用cur记录后,放入sorted数组,这个数组的指针 ,如次以此比较,直到两个数组比较完成。
代码语言:javascript复制class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = 0,p2 = 0;
int[] sorted=new int[m n];
int cur;
while(p1<m || p2<n){
if(p1 == m){
cur = nums2[p2 ];
}else if(p2 == n){
cur = nums1[p1 ];
}else if(nums1[p1]<nums2[p2]){
cur = nums1[p1 ];
}else{
cur = nums2[p2 ];
}
sorted[p1 p2-1]=cur;
}
for(int i=0;i<m n;i ){
nums1[i]= sorted[i];
}
}
}
java中比较bug的方法
将nums2中的值,全部加入到nums1中,之后再用sort方法排序。极其easy且傻瓜
代码语言:javascript复制class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i=0;i<n;i )
{
nums1[m i]=nums2[i];
}
Arrays.sort(nums1);
}
}
逆向双指针
代码语言:javascript复制public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1=m-1;
int p2=n-1;
int p=m n-1;
while(p2 >= 0){
if(p1>=0 && nums1[p1]>nums2[p2]){
nums1[p--]=nums1[p1--];
}else{
nums1[p--]=nums2[p2--];
}
}
}