和大神们学习每天一题(leetcode)-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 andn respectively.

这道题目的是想考察归并排序中的合并环节,但是严格说题意还是有些模糊的,并没有说排序的顺序是递增还是递减,但是系统默认成了递增。

实际上就题目提供的线索而言,A和B完全有可能一个递增一个递减,或者两个都是递增或递减。

class Solution 
{
public:
	void merge(int A[], int m, int B[], int n)
	{
		if (n == 0)//如果B序列长度为0,则不需要合并
			return;
		int nEnd = m + n - 1, nEndA = m - 1, nEndB = n - 1;//在序列A和B的结尾标定两个位置,并在A、B合并后序列结尾标定一个位置
		if (m == 0 && n != 0)//如果A序列长度为0并且B序列长度不为0,则将B中所有元素复制到A中
		{
			for (int nTemp = 0; nTemp < n; nTemp++)
			{
				A[nTemp] = B[nTemp];
			}
			return;
		}
		while (nEndA >= 0 && nEndB >= 0)//只要A、B序列都没有遍历完就循环继续
		{
			if (A[nEndA] > B[nEndB])//比较当前标定处A、B序列值的大小,取较大的复制到合并序列当前标定位
			{
				A[nEnd] = A[nEndA];
				nEndA--;
			}
			else
			{
				A[nEnd] = B[nEndB];
				nEndB--;
			}
			nEnd--;
		}
		if (nEndB >= 0)//如果A序列遍历完全时B序列还没遍历完则将B中剩下元素复制到合并序列剩下位置
		{
			for (int nTemp = 0; nTemp <= nEndB; nTemp++)
			{
				A[nTemp] = B[nTemp];
			}
		}
	}
};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值