题目描述

给定一个长度是n整数的无序序列,然后给定一个整数m,判定是序列中是否有两个数的和是m。注意,数列是无序的,数据可能有重复的。

解题思路

需要利用哈希进行解题,这样保证复杂度是O(n)O(n)O(n)。 注意一个特别情况,加入数据序列是{1, 3, 5},数据是6,那么3的情况下会出问题。因此解决方案是:如果m是偶数,而且当前的数是m/2而且只出现了一次,那么肯定不是。

AC代码

#include <iostream>
#include <vector>
#include <unordered_map>int main() {std::vector<int> vec;int m, n;std::cin >> n >> m;bool even = (m % 2 == 0);for (int i = 0; i < n; ++i) {int x;std::cin >> x;vec.emplace_back(x);}std::unordered_map<int, int> nums;for (int i = 0; i < n; ++i) {int x = m - vec[i];auto it = nums.find(x);if (it == nums.end()) {nums.emplace(std::make_pair(x, 1));} else {it->second += 1;}}bool tag = false;for (int i = 0; i < n; ++i) {auto it = nums.find(m - vec[i]);if (it != nums.end()){if (even && it->first == m / 2 && it->second == 1) {  // 偶数情况出现一半continue;}tag = true;break;}}if (tag) {std::cout << "True\n";} else {std::cout << "False\n";}return 0;
}

判断无序数组中是否存在两个数之和为m相关推荐

  1. 【算法】数组与矩阵问题——找到无序数组中最小的k个数

    1 /** 2 * 找到无序数组中最小的k个数 时间复杂度O(Nlogk) 3 * 过程: 4 * 1.一直维护一个有k个数的大根堆,这个堆代表目前选出来的k个最小的数 5 * 在堆里的k个元素中堆顶 ...

  2. 小米笔试题:无序数组中最小的k个数

    题目描述 链接:https://www.nowcoder.com/questionTerminal/ec2575fb877d41c9a33d9bab2694ba47?source=relative 来 ...

  3. java无序数组_Java查找不重复无序数组中是否存在两个数字的和为某个值

    今天去某在线教育面试面试官让做的一道题,题目描述如下: 给定一个不重复的无序数组arr和一个定值num 查找arr中是否有两个数的和等于num 有则返回这两个数的下标(可能有多组, 只用返回一组), ...

  4. 找出无序数组中最小的k个数(top k问题)

    2019独角兽企业重金招聘Python工程师标准>>> 给定一个无序的整型数组arr,找到其中最小的k个数 该题是互联网面试中十分高频的一道题,如果用普通的排序算法,排序之后自然可以 ...

  5. 小顶堆实现求无序数组中的最大k个数

    //建立含有n个元素的小顶堆 void MakeMinHeap(int a[], int n) { for (int i = n / 2 - 1; i >= 0; i--) MinHeapFix ...

  6. (算法1) 从数组中快速寻找两数字之和为目标的数字 python

    Bruteforce算法  双循环一个个检测所有两个数字组合 时间复杂度: O(n^2) class Solution(object):def twoSum(self, nums, target):& ...

  7. 和数(一个数等于另外两个数之和)

    蒜头君给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和.比如,对于数列 1 2 3 4,这个问题的答案就是 2,因为 3 = 2 + 1, 4 = 1 + 3. 输入格式 共两行,第一 ...

  8. 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X

    1. 问题描述 给定排的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X.给出一个O(nlg(n))的算法. 2. 解决思路 首先对数组进行排序,如果使用归并的排序的话,算法的复杂度在nl ...

  9. 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级

    在两个有序的数组中找第N个数,O(lgm+lgn)级 分类: 算法2009-10-09 20:52 981人阅读 评论(3) 收藏 举报 问题描述: Give a divide and conquer ...

最新文章

  1. python中的模块如何学习_在python中学习队列模块(如何运行它)
  2. LeetCode 445. Add Two Numbers II--面试算法题--C++,Python解法
  3. OpenCV 升降维度
  4. AndroidStudio取消撤销、AS取消撤销;Ctrl+Shift+Z;
  5. IOS开发基础之音频工具类封装AVAudioPlayer
  6. 全国职业院校技能大赛软件测试题目,我校喜获2018全国职业院校技能大赛“软件测试”赛项一等奖...
  7. 工业交换机与普通商用交换机的对比详解
  8. 常用的lucene分词器-笔记
  9. Problem C: 结构体---点坐标结构体
  10. Cesium中的相机—YawPitchRoll
  11. ROS笔记(20) Kinect仿真
  12. autohold有什么弊端吗_自动驻车AUTO HOLD有啥作用?怎样使用?
  13. Oracle PLSQL 客户端 连接Oracle12.2 出现权限问题的解决办法以及绿色版Oracle客户端的使用....
  14. 【NOI1998】免费馅饼,膜一膜XYX大爷
  15. 随想录(用好自己的时间)
  16. 使用USB直接方式解决ESXi识别加密狗的问题
  17. php实现豆瓣isbn查询API接口制作
  18. Python学习-PY4E作业
  19. vscode英文界面转换为中文界面
  20. 刷脸支付便利更好推动普惠金融的落地

热门文章

  1. 软件工程导论 07章软件测试
  2. 度度熊的01世界 DFS
  3. 教我兄弟学Android逆向
  4. 目标检测————主干网络是否应该选用DenseNet(提问)
  5. 手把手教程 Sublime Text 删除重复行
  6. dpkg: error processing package oracle-java8-installer (--configure):
  7. ERROR:imshow、Mat、waitkey找不到标识符(opencv)
  8. 让Python在Android系统上飞一会儿:第三节 在电脑上编写程序在手机上运行
  9. 高质量C /C编程指南---附录B :C /C试题和答案
  10. [CMake] 官方文档 和 FAQ