我们为两个数组分别设置一个指针 p1与 p2来作为队列的头部指针,p1作为nums1的指针,p2作为nums1的指针,从两数组坐标0,开始比大小,谁小谁的数组坐标下的数,用cur记录后,放入sorted数组,这个数组的指针++,如次以此比较,直到两个数组比较完成。
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且傻瓜
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); } }
逆向双指针
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--]; } } }