Leetcode-2つの順序付けられた配列をマージ-5

2つの順序付けられた配列を組み合わせる

質問では、
  2つの順序付き整数配列nums1とnums2を指定し、nums2の整数をnums1にマージし、nums1も順序付き配列にするように求められます。   スペースの複雑さを最小限に抑えるための
アイデア
、新しい配列を作成することはできません。直接nums1に入れる必要があります。時間の複雑さをできるだけ小さくする必要があることを考慮して、配列内の2つの要素を比較できます。nums1では、添え字は小さいですが、これによりnums1の元の値が上書きされることを考慮して、nums1のサイズは2つの配列のすべての要素を収めるのに十分であると想定し、後ろから前に放電できます。つまり、要素2つの配列のが比較され、大きい方の要素がnums1配列の最後に配置され、配列がいっぱいになるまで逆の塗りつぶしが実行されます。
コード

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
	int p = m + n - 1;
	int p1 = m - 1;
	int p2 = n - 1;

	while (p1 >= 0 && p2 >= 0)
	{
		if (nums1[p1] >= nums2[p2])
		{
			nums1[p] = nums1[p1];
			p1--;
		}
		else
		{
			nums1[p] = nums2[p2];
			p2--;
		}
		p--;
	}
	if (p1 == -1)
	{
		while (p2 >= 0)
		{
			nums1[p] = nums2[p2];
			p2--;
			p--;
		}
	}
}

おすすめ

転載: blog.csdn.net/weixin_43580319/article/details/113129564