leecode 解题总结:88. Merge Sorted Array

来源:互联网 发布:算法竞赛书籍推荐 知乎 编辑:程序博客网 时间:2024/05/21 15:49
#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 82 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;}

0 0
原创粉丝点击