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

注意点:

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 }

原文地址:https://www.cnblogs.com/liugl7/p/11402806.html

时间: 2024-12-10 14:31:14

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

[华为机试练习题]43.在字符串中找出连续最长的数字串

题目 描述: 请一个在字符串中找出连续最长的数字串,并把这个串的长度返回:如果存在长度相同的连续数字串,返回最后一个连续数字串: 注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串"1234"的长度就小于数字串"1359055",如果没有数字,则返回空字符串("")而不是NULL! 样例输入 abcd12345ed125ss123058789 abcd12345ss54761 样例输出 输出123058789,函数返回值9 输出547

两个有序数组找出相同数据

两个有序数组找出相同数据,要求最简单的算法复杂度. class Program { static void Main(string[] args) { int Low = 0; int[] m = new int[] { 2, 4, 6, 9, 12, 13, 15, 16 }; int[] n = new int[] { 3, 5, 9, 12, 15 }; foreach (int item in m) { Search(n, ref Low, n.Length - 1, item); }

【转】一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字。

转自:http://zhedahht.blog.163.com/ 题目:一个数组中有三个数字a.b.c只出现一次,其他数字都出现了两次.请找出三个只出现一次的数字. 分析:在博客http://zhedahht.blog.163.com/blog/static/2541117420071128950682/中我们讨论了如何在一个数组中找出两个只出现一次的数字.在这道题中,如果我们能够找出一个只出现一次的数字,剩下两个只出现一次的数字就很容易找出来了. 如果我们把数组中所有数字都异或起来,那最终的结

[题目2]不修改数组找出重复的数字

代码实现: package j2; /** * 不修改数组找出重复的数字 * Created by admin on 2019/5/14. */ public class FindDuplicate3 { public static void main(String[] args) { int arr[] = {2,3,5,4,3,2,6,7}; System.out.println(duplicate(arr,arr.length)); } public static int duplicat

一起来刷《剑指Offer》——不修改数组找出重复的数字(思路及Python实现)

数组中重复的数字 在上一篇博客中<剑指Offer>-- 题目一:找出数组中重复的数字(Python多种方法实现)中,其实能发现这类题目的关键就是一边遍历数组一边查满足条件的元素. 然后我们在博客用最复杂的方式学会数组(Python实现动态数组)这篇博客中介绍了数组这一结构的本质,并自己动手实现了一个动态数组. 今天我们介绍一下另一道来自<剑指Offer>的关于数组的面试题--不修改数组找出重复的数字. 不修改数组找出重复的数字 题目二:不修改数组找出重复的数字 给定一个长度为 n+

面试题3(二):不修改数组找出重复的数字

// 面试题3(二):不修改数组找出重复的数字// 题目:在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至// 少有一个数字是重复的.请找出数组中任意一个重复的数字,但不能修改输入的// 数组.例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的// 输出是重复的数字2或者3. 解题思路: 不能修改数组,可以创建一个长度为n+1的辅助数组,空间复杂度为O(n). 如果用时间换空间的话,可以使用二分查找的思想. 元素范围为1~n,但是有n+1

1-100的连续整数,乱序,丢失两个数,原地找出这两个数

问题描述: 1.比如inp={2,3,6,4,7}丢失了1,5,原地找出这两个数. 2.为了方便讨论这个连续数组从1开始到7截至,数组扩展到7位inp={2,3,6,4,7,0,0}: 解决: 1.利用数组元素值与数组下标关系,遍历整个数组,没有被遍历到的位置则为丢失元素所在位置,具体流程如下: 1.从头开始读数组inp[0]=2,根据值2跳转到数组下标为inp[2-1]的位置,得到inp[2-1]=3: 2.修改状态:这个过程中inp[0]位置跳出过,但未跳入过,用0表示这种状态.修改inp[

【c语言】第一个只出现一次的字符题目:在字符串中找出第一个只出现一次的字符

// 第一个只出现一次的字符题目:在字符串中找出第一个只出现一次的字符. // 如输入"abaccdeff",则输出'b'. #include <stdio.h> #include <string.h> char find_one(char *str) { int a[256]; int len = strlen(str); int i = 0; memset(a, 0, sizeof(a)); for (i = 0; i<len; i++) { a[st

【趣味算法题】在数组中,对于所有元素,找出比当前元素大的下一个元素

在数组中,对于所有元素,找出比当前元素大的下一个元素 意思就是,eg.  数组为 3 1 2 5 4 6 7 那么我们需要得到的结果应该是  5 2 5 6 6 7 -1 解决方法如下: 暴力匹配: O (n ^ 2 ) 的效率对所有元素匹配过去,效率非常的低 经过提示, 我想到的一种 O ( nlg n ) 效率的算法 只需要对数组扫描一次,我们用一个 Priority_queue 来得到当前最小的元素 Prority_queue 存放的数据结构为: struct sc { int key,