leetcode — merge-sorted-array

import java.util.Arrays;

/**
 * Source : https://oj.leetcode.com/problems/merge-sorted-array/
 *
 *
 * Given two sorted integer arrays A and B, merge B into A as one sorted array.
 *
 * Note:
 *   You may assume that A has enough space (size that is greater or equal to m + n)
 *   to hold additional elements from B. The number of elements initialized in A and B
 *   are m and n respectively.
 */
public class MergeSortedArray {

    /**
     * 将数组B合并到数组A,数组A空间足够大能放得下B
     * 合并两个排序的数组,使用两个指针分别指向两个数组,然后比较大小将较小的放到数组A中,
     *          如果把小的放在前面可能回把A中的元素覆盖(数组排序是升序的)
     *
     * 所以可以考虑从两个数组的末尾开始合并,将较大的元素放在A数组的最后
     *
     * 如果任意一个数组遍历完了,把B中剩下的元素依次插入A中
     * @param a
     * @param b
     * @return
     */
    public int[] merge (int[] a, int m, int[] b, int n) {
        int pa = m - 1;
        int pb = n - 1;
        int pc = m + n - 1;
        while (pa > -1 && pb > -1) {
            if (a[pa] > b[pb]) {
                a[pc--] = a[pa--];
            } else {
                a[pc--] = b[pb--];
            }
        }
        while (pb > -1) {
            a[pc--] = b[pb--];
        }
        return a;
    }

    public static void main(String[] args) {
        MergeSortedArray mergeSortedArray = new MergeSortedArray();
        int[] a = new int[]{1,5,9,0,0,0,0};
        int[] b = new int[]{2,3,8};

        System.out.println(Arrays.toString(mergeSortedArray.merge(a, 3, b, 3)));
    }
}

转载于:https://www.cnblogs.com/sunshine-2015/p/7759798.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值