您的位置:首页 > 其它

88. merge sorted array

2016-07-01 16:29 281 查看
简单题,一定要想出两到三种思路。比如这题,我一开始的思路,简单直观,但开辟了新的内存。

void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = 0, j = 0;
int count = 0;
vector<int> tnum = nums1;
while (i < m && j < n) {
if (tnum[i] <= nums2[j]) {
nums1[count] = tnum[i];
i++;
}
else {
nums1[count] = nums2[j];
j++;
}
count++;
}
if (i == m) {
while (j < n) {
nums1[count] = nums2[j];
count++;
j++;
}
}
else {
if (j == n) {
while (i < m) {
nums1[count] = tnum[i];
i++;
count++;
}
}
}
}


复制了一遍nums1, 特别不好,还只知道从前往后。更好的做法,就是倒过来,直接写。

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