您的位置:首页 > 编程语言 > C#

Leetcode 合并有序数组 Merge 2 arrays in 1 array

2016-09-26 12:11 351 查看
《进军硅谷》原题:合并有序数组

给定两个有序数组A和B, 合并B到A, 结果保持有序。假设A有足够空间容纳B。初始时,A、B元素各有m和n个;

Leetcode:    https://leetcode.com/problems/merge-sorted-array/

分析:

数组插入新元素没有链表那么方便,因为插入一个新元素会导致插入后的所有元素的移动,为了避免移动,通常从后向前插入,即反向插入;

思路:

1 找到原有数组A和B的最后一个元素;
2 逐个把较大的值放在A数组的m+n-1位置向前。
3 一定要先画图,再写代码;注意边界条件!

public void Merge(int[] nums1, int m, int[] nums2, int n)
{
//边界条件
if (n == 0) return;
if (m == 0) //返回所有的nums2到nums1中
while (n > 0)
{
nums1[n - 1] = nums2[n - 1];
n--;
}

int i = m - 1;
int j = n - 1;
int k = m + n - 1;
while (i >= 0 || j >= 0)
{
if (i < 0 && j >= 0)
{
nums1[k] = nums2[j];
j--;
}
else if (i >= 0 && j < 0)
{
//do nothing
i--;
}
else
{
if (nums1[i] >= nums2[j])
{
nums1[k] = nums1[i];
i--;
}
else if (nums1[i] < nums2[j])
{
nums1[k] = nums2[j];
j--;
}
}
k--;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息