#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
/*
问题:
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.
分析:这道题是归并两个已经排序的数组。其实就是类似于归并排序
可以逐个比较两个数组当前元素A[i] >= B[j],需要将B[j]插入到A[i]的第i号位置,同时A[i]及其后面元素全部向后移动。i++,j++
A[i] < B[j] , 无需插入,j++
可以看到这样会使得A[i]经常移动元素,倒不如设计一个数组C,将所有数字放入C中,然后另A=C,即可
输入:
3(第一个数组元素个数) 5(第二个数组元素个数)
1 4 8
2 3 7 8 9
输出:
1 2 3 4 7 8 8 9
*/
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
if(nums2.empty())
{
return ;
}
if(nums1.empty())
{
nums1 = nums2;
return ;
}
vector<int> nums(m+n , 0);
int i = 0;
int j = 0;
int k = 0;
while(i < m && j < n)
{
if(nums1.at(i) <= nums2.at(j))
{
nums.at(k++) = nums1.at(i++);
}
else
{
nums.at(k++) = nums2.at(j++);
}
}
//如果数组1还没有遍历完,将数组1所有元素放入数组2中
while(i < m)
{
nums.at(k++) = nums1.at(i++);
}
while(j < n)
{
nums.at(k++) = nums2.at(j++);
}
nums1 = nums;
}
};
void print(vector<int>& result)
{
if(result.empty())
{
cout << "no result" << endl;
return;
}
int size = result.size();
for(int i = 0 ; i < size ; i++)
{
cout << result.at(i) << " " ;
}
cout << endl;
}
void process()
{
vector<int> nums1;
vector<int> nums2;
int value;
int n1;
int n2;
Solution solution;
vector<int> result;
while(cin >> n1 >> n2 )
{
nums1.clear();
nums2.clear();
for(int i = 0 ; i < n1 ; i++)
{
cin >> value;
nums1.push_back(value);
}
for(int i = 0 ; i < n2 ; i++)
{
cin >> value;
nums2.push_back(value);
}
solution.merge(nums1 , nums1.size() , nums2 , nums2.size());
print(nums1);
}
}
int main(int argc , char* argv[])
{
process();
getchar();
return 0;
}
leecode 解题总结:88. Merge Sorted Array
最新推荐文章于 2024-10-12 16:56:09 发布