给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1中,使得 num1 成为一个有序数组。
注意:
你可以假设 nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。在 nums1 和 nums2 中初始化的元素的数量分别是 m 和 n。
思路:
很典型的合并排序,但是要求最终结果保存在nums1中,所以先把nums1复制一份,然后正常merge。
答案:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i,j,k=0;
vector<int> nums(m);
for(i=0;i<m;i++)nums[i]=nums1[i];
i=0;
while((i<m)&&(j<n)){
if(nums[i]<nums2[j])
nums1[k++]=nums[i++];
else
nums1[k++]=nums2[j++];
}
if(i==m)
while(j<n)
nums1[k++]=nums2[j++];
else
while(i<m)
nums1[k++]=nums[i++];
}
};
这个程序没有通过测试,然后很尴尬的事情发生了:
我自己用dev-c++试了一下,输出是正确的,不知道网上怎么就说我的输出是上面那个,所以我就点开了playground调试,结果。。。。。。。。。。。。
不知道为什么突然觉得这个网站就是故意针对我的。。。。。
另外,感觉博客上写东西不是很方便,还是到github上面做记录吧。