京东笔试题——集合
来源:互联网 发布:汽车刷ecu软件 编辑:程序博客网 时间:2024/06/05 12:48
1. 题目描述
给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。
2. 题目解析
首先想到是暴力破解的方法。原因是之前坐过一道两个排序链表融合的题,就是分别对比链表头的元素的大小然后取小的一端连接到答案链表中。于是我的暴力破解的思路就是将两个数据进行升序排序,一次找最小的元素放置在答案数组中。【但是,这里是转折】这种方法在本地进行计算是没有问题的,但是在线测试大规模数据的时候就会异常了。
所以,突然我就get了容器set的优点。之前经常用vector,类似于数组,但是!但是set在这道题中体现的优点就是:
1. set 的元素是唯一的!!对的,你没有看错!对 set 使用 insert 进行插入元素,如果这个元素刚好已经存在了,set就不会再插入这个元素了!!你说,用在这里完美不完美!!
2. set 是默认升序的啊!完美不完美!你就说用在这里完美不完美!连排序都不需要我们自己做了。
嗯,好,使用set优化的代码看下面吧。
3. 题目解答——cpp
#include "stdafx.h"#include <iostream>#include <set>using namespace std;int main() { int m, n; cin >> m >> n; int len = m + n; set<int> bingji; for(int i = 0; i < len; i++) { int num; cin >> num; bingji.insert(num); } int length = bingji.size(); set<int>::iterator p = bingji.begin(); while(length != 1) { cout << *p << " "; p++; length--; } cout << *p << endl; return 0;}
附:(暴力破解的不美妙的解法)
但是只通过了一个测试用例,好像有bug~~有大佬看到的话,求指导啊
#include <iostream>#include <vector>#include <algorithm>using namespace std;vector<int> Merge(vector<int> num1, vector<int> num2) { if (num1.size() == 0) return num2; if (num2.size() == 0) return num1; vector<int> answer; if (num1.size() == 0 && num2.size() == 0) return answer; sort(num1.begin(), num1.end()); sort(num2.begin(), num2.end()); vector<int>::iterator abegin = num1.begin(); vector<int>::iterator bbegin = num2.begin(); while (abegin != num1.end()-1 && bbegin != num2.end()-1) { if (*abegin < *bbegin) { answer.push_back(*abegin); ++abegin; } if (*abegin > *bbegin) { answer.push_back(*bbegin); ++bbegin; } if (*abegin == *bbegin) { answer.push_back(*abegin); ++abegin; ++bbegin; } } if (*abegin > *bbegin) { answer.push_back(*bbegin); answer.push_back(*abegin); } else { answer.push_back(*abegin); answer.push_back(*bbegin); } abegin++; bbegin++; while (abegin != num1.end()) { answer.push_back(*abegin); ++abegin; } while (bbegin != num2.end()) { answer.push_back(*bbegin); ++bbegin; } return answer;}int main() { static int n, m; cin >> n >> m; if (n == 0 || m == 0 || n > 10000 || m > 10000) { return 0; } vector<int> A; vector<int> B; for (int i = 0; i<n; i++) { int mid; cin >> mid; A.push_back(mid); } for (int i = 0; i < m; i++) { int mid; cin >> mid; B.push_back(mid); } vector<int> ans = Merge(A, B); int len = ans.size(); for (int i = 0; i < len; i++) { if (i == len - 1) { cout << ans[i]; } else { cout << ans[i] << " "; } } return 0;}
阅读全文
0 0
- 京东笔试题——集合
- 狸猫的笔试——集合
- 华为笔试——字符集合
- 字符串笔试题集合
- 集合的笔试题
- 求职笔试题集合
- JAVA笔试题集合
- .net笔试题超级集合
- 【笔试题集合】字符串问题
- 迅雷2014校招笔试编程题——求解两个集合差集,集合是以单向链表存储
- 网易2017春招笔试真题编程题集合——9.涂棋盘
- 网易2017春招笔试真题编程题集合——2.优雅的点
- 2017年校招全国统一模拟笔试(第一场)编程题集合——连续整数
- 2017年校招全国统一模拟笔试(第一场)编程题集合——好多鱼
- 2017年校招全国统一模拟笔试(第一场)编程题集合——循环单词
- 2017年校招全国统一模拟笔试(第一场)编程题集合——DNA配对
- 2017年校招全国统一模拟笔试(第一场)编程题集合——超级素数幂
- 2017年校招全国统一模拟笔试(第一场)编程题集合——序列和
- 安卓开发 color表
- springboot基本使用笔记----添加jsp支持及打包部署
- 安卓_缓存
- iOS 开发
- Confluence5.10.8安装教程
- 京东笔试题——集合
- Exploit-db漏洞库
- log4cxx
- 链栈
- JS 操作COOKIE
- 在iframe中优雅地使用父窗口中的$
- java中的字符串常量池
- dismissViewController实现多个模态视图跳转
- JavaWeb学习总结(十二)——Session