逆向双指针 力扣面试题 10.01. 合并排序的数组

面试题 10.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(vector<int>& A, int m, vector<int>& B, int n) {

    }
};

说明:

A.length == n + m

思路:
两指针分别指A,B末尾处,比较其大小,
大的先放在A的末尾,依次比较。

class Solution {
public:
    void merge(vector<int>& A, int m, vector<int>& B, int n) 
    { 
    	int i=m-1,j=n-1,h=m+n-1;
    	while(i!=-1 || j!=-1)
    	{
        	if(i==-1){A[h]=B[j];j--;}
        	//如果A遍历完了,直接将B中元素依次放入A中
        	else if(j==-1){A[h]=A[i];i--;}
        	//如果B遍历完了,直接将A中元素依次放入A中
        	else
        	{
        	    if(A[i]>B[j])
        	    //大的放A尾部
            	{
                	A[h]=A[i];
                	i--;
            	}
            	else{
                	A[h]=B[j];
                	j--;
            	}
        	}
        	h--;
    	}
    }
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46039856/article/details/106245681