您的位置:首页 > 其它

88. Merge Sorted Array

2017-02-25 23:12 239 查看
问题描述

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.

解决思路

不能用额外内存,要么就是正向一个一个比较,比较到nums1的数值比nums2大时,将该位置的nums1及其以后的数值都平移到后面去。。。然后这种做法很蠢,而且情况复杂,而且复杂度不一定是0(m+n)。。。 其实从后面开始比较,倒序插入就很简单。。。

po上我前向比较的代码吧。。。 思路太死板了啊。

代码

class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
if (m == 0)
nums1 = nums2;
else if (n == 0)
return;
int i1 = 0 , i2 = 0;
int count = m + n;
while(i1 < count) {
if (i1 < m && i2 < n && nums1[i1] > nums2[i2]) {
int k = i2;
for (k = i2; k < n; ++k)
if(nums2[k] > nums1[i1])
break;
k = k - i2;
for (int i = m-1; i >= i1; --i) {
nums1[i+k] = nums1[i];
}
for ( int i = 0; i < k; ++i) {
nums1[i+i1] = nums2[i2+i];
}
i1 = i1 + k;
i2 = i2 + k;
m += k;
if (i2 == n)
break;
} else if (i1 < m && i2 < n){
++i1;
} else if (i1 == m) {
for (int i = i2; i < n; ++i)
nums1[i1+i-i2] = nums2[i];
break;
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: