算法题 合并两个有序数组

2024-02-20 19:12:21 浏览数 (1)

 我们为两个数组分别设置一个指针 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--];
            }
        }
    }

0 人点赞