您的位置:首页 > 其它

Leetcode 第88题 Merge Sorted Array

2015-12-01 15:30 393 查看

题目:Merge Sorted Array

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:

You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.

题目分析:

一开始对题目的分析有错,以为是直接将两个数组按序合并起来

题目的含义是在数组1中取m个元素,在数组2中取n个元素,按序合并到数组1中

思路:

采用数组倒序放入数组的方式,优点是能够不覆盖掉其他元素并且不用移动更多的元素

采用顺序的方式也可以,只是稍微复杂一些

代码:

C++:

//采用倒序的方式循环  并且题目的含义是从nums1中取出m个元素,在nums2中取出n个元素合并为新数组nums1;并不是直接nums1数组和nums2数组合并
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i,j,k;
for(i=m-1,j=n-1,k=m+n-1;k>=0;--k)
{
if(i>=0&&(j<0||nums1[i]>nums2[j]))
//如果数组nums1没有比较完,数组nums2比较完了或者数组nums1没有比较完,数组nums2没有比较完 数组nums2元素小于数组1元素值
//那么需要将数组1的值放入到后面
{
nums1[k]=nums1[i--];
}
//如果数组1比较完了,或者是数组2的元素大于数组1的元素
else nums1[k]=nums2[j--];
}
}
};


Javascript:

/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
var merge = function(nums1, m, nums2, n) {
var a=m-1;
var b=n-1;
for(var i=m+n-1;i>=0;--i)
{
if(a>=0 && b<0)//说明a未比较完b已经比较完了那么直接将所有的a都放入数组nums1中
{
nums1[i]=nums1[a--];
}
else if(a>=0 && b>=0 && nums2[b]<nums1[a])
//说明a未比较完b未比较完并且数组1的值大于数组2的值那么直接将a都放入数组nums1中
{
nums1[i]=nums1[a--];
}
else
{
nums1[i]=nums2[b--];
}
}
};


Javascript:下面这个程序的作用是直接将数组1和数组2合并到数组1中

var merge = function(nums1, m, nums2, n) {
var a=0;
var b=0;
for(var i=0;i<m+n;i++)
{
if(a==m && b<n)
{
nums1.push(nums2[b]);
b++;
}
else if(nums2[b]>nums1[i] && b<n)
{
a++;
}
else if(nums2[b]<nums1[i] && b<n)
{
nums1.splice(i,0,nums2[b]);
b++;
}
}
};
//注释:默认m和n分别是数组的长度,是一开始理解题目有错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode