测试题目:两个有序数组,找出最大的五个数字组成一个新的数组

Posted liugl7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试题目:两个有序数组,找出最大的五个数字组成一个新的数组相关的知识,希望对你有一定的参考价值。

注意点:

1.输入两行的方法

2.两行输入的数量和小于5的情况

 

 1 //评测题目: 两个有序数组,找出最大的五个数字组成一个新的数组
 2 #include <iostream>
 3 #include <vector> 
 4 #include <cstring>
 5 #include <bits/stdc++.h> 
 6 using namespace std;
 7 
 8 vector<int> getTop5(vector<int>& data1, vector<int>& data2, int& up)
 9     int i=data1.size()-1;
10     int j=data2.size()-1;
11     vector<int> res;
12     for(int k=0; k<up;k++)
13         if( i<0 || j<0 ) break;
14         if(data1[i] >= data2[j] )
15             res.push_back( data1[i] );
16             i--;
17         
18         else
19             res.push_back( data2[j] );
20             j--;            
21         
22     
23     
24     if(res.size()<up)  //注意有可能不够5个。
25         if(i == -1 )
26             for(int m=j; res.size()<up && m>=0; m-- )
27                 res.push_back( data2[m] ); 
28             
29         
30         
31         if(j == -1)
32             for(int n=i; res.size()<up && n>=0; n-- )
33                 res.push_back( data1[n] );
34                         
35          
36     
37     
38     return res;
39  
40 
41 int main()
42     
43     int up = 5;
44     vector<int> data1;
45     vector<int> data2;
46     string str; 
47     bool sign1=0;  //代表data1已经读入 
48     bool sign2=0;  //代表data2已经读入 
49     while( getline(cin, str) )
50         if(!sign1 )
51             istringstream temp1(str);
52             int cur1;
53             while(temp1>>cur1)
54                 data1.push_back(cur1);
55                         
56             sign1 = 1;
57         
58         else if(!sign2 )
59             istringstream temp2(str);
60             int cur2;
61             while(temp2>>cur2)
62                 data2.push_back(cur2); 
63             
64             sign2 = 1;
65         
66         
67         if(sign1&&sign2) 
68                         
69             vector<int> res = getTop5(data1, data2, up);
70             if(res.size()<up) cout<<"nums are not enough\n";
71             else
72                 for(int i=0; i<up; i++)
73                     cout<<res[i]<<" ";
74                 
75                 cout<<endl;
76             
77             
78             sign1 = 0;
79             sign2 = 0;
80             data1.clear();
81             data2.clear();
82         
83         
84      
85     
86 

 

以上是关于测试题目:两个有序数组,找出最大的五个数字组成一个新的数组的主要内容,如果未能解决你的问题,请参考以下文章

算法 - 合并两个有序数组成一个有序数组

算法 - 合并两个有序数组成一个有序数组

Vector类相关OJ题目的理解

分而治之算法找到两个有序元素之间的最大差异

无序数组中找出最大的两个(K)数

算法题的五种解法