【LeetCode】88. 合并两个有序数组 (双指针) (代码较为浓缩)

 前言:

虽然可以直接 合并两个数组,后使用排序算法,

但是太那啥,我们刷算法题 不就是为了培养算法思想吗?可以学习下面的解法

题目

【LeetCode】88. 合并两个有序数组 (双指针) (代码较为浓缩)_第1张图片图解思路:

【LeetCode】88. 合并两个有序数组 (双指针) (代码较为浓缩)_第2张图片

 代码示例:

浓缩版:


void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) 
{
    int l1 = m - 1;
    int l2 = n - 1;
    int l3 = m + n - 1;
    while(l1 >= 0 && l2 >= 0)
    {
        nums1[l3--] = nums1[l1] >= nums2[l2] ? nums1[l1--] : nums2[l2--]; 浓缩之处
    }
    while(l1 >= 0) nums1[l3--] = nums1[l1--];
    while(l2 >= 0) nums1[l3--] = nums2[l2--];
}

普通版

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
	int l1 = m - 1;
	int l2 = n - 1;
	int l3 = m + n - 1;
	while (l1 >= 0 && l2 >= 0)
	{
		if (nums1[l1] >= nums2[l2])
		{ 
			nums1[l3] = nums1[l1];
			l1--;
			l3--;
		}
		else
		{
			nums1[l3] = nums2[l2];
			l2--;
			l3--;
		}
	}
	while (l1 >= 0)
	{
		nums1[l3] = nums1[l1];
		l1--;
		l3--;
	}
	while (l2 >= 0)
	{
		nums1[l3] = nums2[l2];
		l2--;
		l3--;
	}
}

你可能感兴趣的:(leetcode,算法,c语言,c++)