[牛客网-Leetcode] #数组 中等 merge-sorted-array

合并排序数组 merge-sorted-array

题目描述

给出两个有序的整数数组A和B,请将数组B合并到数组A中,变成一个有序的数组
注意:
可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n

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 to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.

解题思路

  • 三指针,从A的m+n-1位置开始依次合并,即将A和B从大到小合并
  • 指针pa和pb分别用于从后往前遍历A和B数组,初始分别为m-1和n-1,代表指向A和B元素的右下标
  • 指针index用于指向合并后区域的右下标,初始为m+n-1,代表指向合并区域的最后一个位置
class Solution {
    
    
public:
    void merge(int A[], int m, int B[], int n) {
    
    
        //分别用于遍历数组A和B,初始指向右下标
        int pa(m - 1), pb(n - 1);
        //用于记录合并后数组的右下标
        int index(m + n - 1);
        while(pa >= 0 && pb >= 0) {
    
    
            if(A[pa] > B[pb]) {
    
     
                A[index --] = A[pa --];
            } else {
    
    
                A[index --] = B[pb --];
            }
        }
        while(pb >= 0) A[index --] = B[pb --];
    }
};

猜你喜欢

转载自blog.csdn.net/cys975900334/article/details/106666092