随笔- 509  文章- 0  评论- 151  阅读- 22万 

2014-05-02 07:37

题目链接

原题:

// merge sorted arrays 'a' and 'b', each with 'length' elements, 
// in-place into 'b' to form a sorted result. assume that 'b' 
// has 2*length allocated space. 
// e.g. a = [1, 3, 5], b = [2, 4, 6] => b = [1, 2, 3, 4, 5, 6] 

//how to do it without rearanging the b array

题目:有两个排好序的数组a[]和b[],把a有序归并到b中去,保证b的空间充足。如何就地完成这个算法?

解法:从后往前归并就可以不用额外空间了。

代码:

复制代码
 1 // http://www.careercup.com/question?id=5435439490007040
 2 #include <iostream>
 3 #include <vector>
 4 using namespace std;
 5 
 6 class Solution {
 7 public:
 8     void mergeTwoArray (vector<int> &a, vector<int> &b) {
 9         // merge a[] into b[].
10         int na = (int)a.size();
11         int nb = (int)b.size();
12 
13         b.resize(na + nb);
14 
15         int i, j, k;
16         
17         i = na - 1;
18         j = nb - 1;
19         k = na + nb - 1;
20         while (i >= 0 && j >= 0) {
21             b[k--] = a[i] > b[j] ? a[i--] : b[j--];
22         }
23         while (i >= 0) {
24             b[k--] = a[i--];
25         }
26     };
27 };
28 
29 int main()
30 {
31     vector<int> a, b;
32     int na, nb;
33     int i;
34     Solution sol;
35     
36     while (cin >> na >> nb && (na > 0 && nb > 0)) {
37         a.resize(na);
38         b.resize(nb);
39         for (i = 0; i < na; ++i) {
40             cin >> a[i];
41         }
42         for (i = 0; i < nb; ++i) {
43             cin >> b[i];
44         }
45         sol.mergeTwoArray(a, b);
46         nb = (int)b.size();
47         for (i = 0; i < nb; ++i) {
48             i ? (cout << ' ', 1) : 1;
49             cout << b[i];
50         }
51         cout << endl;
52         
53         a.clear();
54         b.clear();
55     }
56     
57     return 0;
58 }
复制代码

 

 posted on   zhuli19901106  阅读(225)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示