Leecode10.01 合并排序数组

简介: Leecode10.01 合并排序数组

给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。

初始化 A 和 B 的元素数量分别为 m 和 n。

示例:

输入:

A = [1,2,3,0,0,0], m = 3

B = [2,5,6], n = 3

输出: [1,2,2,3,5,6]

class Solution {
    public void merge(int[] A, int m, int[] B, int n) {
        int lenA = m - 1;
        int lenB = n - 1;
        int max = m + n - 1;
        while(lenA >= 0 && lenB >= 0){
            if(A[lenA] > B[lenB]){
                A[max] = A[lenA];
                lenA--;
                max--;
                continue;
            }else {
                A[max] = B[lenB];
                lenB--;
                max--;
            }
        }
        while(lenB >= 0){
            A[max] = B[lenB];
            max--;
            lenB--;
        }
    }
}

提交之后,用时很短同时也不占用比较多的内存

解题思路:

由于A和B数组都是有序的,那么A数组的最后一个就是A数组中最大的一个,B数组中的最后一个就是B数组中最大的一个。

将A和B数组从最后开始往前比较,比较之后大的值就放在A数组中的最后,依次比较。当原来A数组中的数据重新都放入A数组中之后而B数组中的数据还有剩余的时候,那么就让B数组中的数字依次填入A数组中就可以了。


相关文章
|
1月前
|
人工智能 索引
leecode刷题 将有序数组转换为二叉搜索树
给定一个升序排列的整数数组 `nums`,要求将其转换为一棵高度平衡的二叉搜索树(BST)。通过递归方法,选择数组中间元素作为根节点,左半部分构建左子树,右半部分构建右子树。优化后的代码使用索引递归,避免了数组复制操作,提高了效率。
|
4月前
|
存储 搜索推荐 算法
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
43 1
|
4月前
排序之希尔,归并,快排
排序之希尔,归并,快排
22 0
|
6月前
|
搜索推荐 算法
十大排序算法-快排-希尔-堆排-归并-冒泡-桶排-选择-插入-计数-基数
十大排序算法-快排-希尔-堆排-归并-冒泡-桶排-选择-插入-计数-基数
|
8月前
|
存储 算法
leetcode题解:88.合并有序数组
leetcode题解:88.合并有序数组
32 0
|
9月前
Leecode之合并两个有序链表
Leecode之合并两个有序链表
|
9月前
|
算法 测试技术 C语言
leecode算法题之数组
leecode算法题之数组
|
9月前
|
存储 搜索推荐 算法
排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序(一)
排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序(一)
|
9月前
面试题 10.01:合并排序的数组
面试题 10.01:合并排序的数组
36 0
|
搜索推荐 Java
Leecode912. 排序数组
Leecode912. 排序数组
65 0