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

合并两个有序的数组

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

双指针

这题其实就是归并排序中的并部分,由于要在A[ ]上原地修改,所以使用一个临时数组temp[ ]来存放A数组中的元素,然后使用双指针比较,较小的元素放入A[ ]中即可

import java.util.*;
public class Solution {
    public void merge(int A[], int m, int B[], int n) {
        // 特殊情况
        if (n == 0) return;
        if (m == 0 && n == 0) return;
        // 先把A向后移动
        int start = 0;
        for (int i = 0; i < n; ++i) {
            start++;
        }
        int[] temp = new int[m];
        for (int i = 0; i < m; ++i) {
            temp[i] = A[i];
        }
        int pa = 0;
        int pb = 0;
        int cur = 0;
        while (pa < m && pb < n) {
            if (temp[pa] <= B[pb]) {
                A[cur] = temp[pa];
                pa++;
            } else { // temp[pa] > B[pb]
                A[cur] = B[pb];
                pb++;
            }
            cur++;
        }
        // 如果有一条链表还没有读完
        if (pa < m) { // 剩下的是pa
            for (; pa < m; pa++, cur++) {
                A[cur] = temp[pa];
            }
        }
        if (pb < n) { // 剩下的是pb
            for (; pb < n; pb++, cur++) {
                A[cur] = B[pb];
            }
        }
    }
}

全部评论

相关推荐

AAA不喝拿铁:西电本硕学历没问题,但是项目名字首先得改虽然一眼能看出来是点评但是不能演都不演就直接给面试官端上去。技术点全是redis显得这像redis的课程实验,也要改。我根据真实面经整理得到的最全(高/中/低频)面试题,需要的牛u可以订阅一手我的专栏,祝好运
点赞 评论 收藏
分享
Rena1ssance_:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务