leetcode-合并两个有序数组-5

合并两个有序数组

题目要求
  给你两个有序整数数组nums1和nums2,要求把nums2中的整数合并到nums1中,并且使nums1也是一个有序数组。
思路
  为了使空间复杂度最小,我们不能创建新的数组,我们需要直接放到nums1中,考虑到时间复杂度也要尽可能的小,我们可以将两个数组中的元素进行比较,小的放在nums1中下标小的位置,但是考虑到这样会覆盖原本在nums1中的值,我们假设nums1中的大小刚好能够放下两个数组中所有的元素,这时我们就可以从后往前进行排放,也就是说两个数组中的元素进行比较,较大的那个元素放在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