题解 | #合并两个有序的数组#

合并两个有序的数组

http://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665

暴力求解

import java.util.*;
public class Solution {
    public void merge(int A[], int m, int B[], int n) {
        for(int i=0;i<n;i++){
            A[m+i] = B[i];
        }
        Arrays.sort(A);
        
    }
}

时间复杂度:O((m+n)log(m+n))。 排序序列长度为m+n,套用快速排序的时间复杂度即可,平均情况为 O((m+n)log(m+n))。

空间复杂度:O(log(m+n))。 排序序列长度为m+n,套用快速排序的空间复杂度即可,平均情况为 O(log(m+n))。 逆向双指针

import java.util.*;
public class Solution {
    public void merge(int A[], int m, int B[], int n) {
        int l1 = m-1;
        int l2 = n-1;
        int p=m+n-1;
        
        while(l1>=0&&l2>=0){
            A[p--] =A[l1]>B[l2]?A[l1--]:B[l2--];
        }
        for(int i=0;i<=l2;i++){
            A[i] = B[i];
        }
        
    }
}

时间o(m+n) 空间o(1)

全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
09-27 00:29
东北大学 Java
伟大的麻辣烫:查看图片
阿里巴巴稳定性 75人发布 投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务