判断无序数组中是否存在两个数之和为m
题目描述
给定一个长度是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相关推荐
- 【算法】数组与矩阵问题——找到无序数组中最小的k个数
1 /** 2 * 找到无序数组中最小的k个数 时间复杂度O(Nlogk) 3 * 过程: 4 * 1.一直维护一个有k个数的大根堆,这个堆代表目前选出来的k个最小的数 5 * 在堆里的k个元素中堆顶 ...
- 小米笔试题:无序数组中最小的k个数
题目描述 链接:https://www.nowcoder.com/questionTerminal/ec2575fb877d41c9a33d9bab2694ba47?source=relative 来 ...
- java无序数组_Java查找不重复无序数组中是否存在两个数字的和为某个值
今天去某在线教育面试面试官让做的一道题,题目描述如下: 给定一个不重复的无序数组arr和一个定值num 查找arr中是否有两个数的和等于num 有则返回这两个数的下标(可能有多组, 只用返回一组), ...
- 找出无序数组中最小的k个数(top k问题)
2019独角兽企业重金招聘Python工程师标准>>> 给定一个无序的整型数组arr,找到其中最小的k个数 该题是互联网面试中十分高频的一道题,如果用普通的排序算法,排序之后自然可以 ...
- 小顶堆实现求无序数组中的最大k个数
//建立含有n个元素的小顶堆 void MakeMinHeap(int a[], int n) { for (int i = n / 2 - 1; i >= 0; i--) MinHeapFix ...
- (算法1) 从数组中快速寻找两数字之和为目标的数字 python
Bruteforce算法 双循环一个个检测所有两个数字组合 时间复杂度: O(n^2) class Solution(object):def twoSum(self, nums, target):& ...
- 和数(一个数等于另外两个数之和)
蒜头君给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和.比如,对于数列 1 2 3 4,这个问题的答案就是 2,因为 3 = 2 + 1, 4 = 1 + 3. 输入格式 共两行,第一 ...
- 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
1. 问题描述 给定排的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X.给出一个O(nlg(n))的算法. 2. 解决思路 首先对数组进行排序,如果使用归并的排序的话,算法的复杂度在nl ...
- 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
在两个有序的数组中找第N个数,O(lgm+lgn)级 分类: 算法2009-10-09 20:52 981人阅读 评论(3) 收藏 举报 问题描述: Give a divide and conquer ...
最新文章
- python中的模块如何学习_在python中学习队列模块(如何运行它)
- LeetCode 445. Add Two Numbers II--面试算法题--C++,Python解法
- OpenCV 升降维度
- AndroidStudio取消撤销、AS取消撤销;Ctrl+Shift+Z;
- IOS开发基础之音频工具类封装AVAudioPlayer
- 全国职业院校技能大赛软件测试题目,我校喜获2018全国职业院校技能大赛“软件测试”赛项一等奖...
- 工业交换机与普通商用交换机的对比详解
- 常用的lucene分词器-笔记
- Problem C: 结构体---点坐标结构体
- Cesium中的相机—YawPitchRoll
- ROS笔记(20) Kinect仿真
- autohold有什么弊端吗_自动驻车AUTO HOLD有啥作用?怎样使用?
- Oracle PLSQL 客户端 连接Oracle12.2 出现权限问题的解决办法以及绿色版Oracle客户端的使用....
- 【NOI1998】免费馅饼,膜一膜XYX大爷
- 随想录(用好自己的时间)
- 使用USB直接方式解决ESXi识别加密狗的问题
- php实现豆瓣isbn查询API接口制作
- Python学习-PY4E作业
- vscode英文界面转换为中文界面
- 刷脸支付便利更好推动普惠金融的落地
热门文章
- 软件工程导论 07章软件测试
- 度度熊的01世界 DFS
- 教我兄弟学Android逆向
- 目标检测————主干网络是否应该选用DenseNet(提问)
- 手把手教程 Sublime Text 删除重复行
- dpkg: error processing package oracle-java8-installer (--configure):
- ERROR:imshow、Mat、waitkey找不到标识符(opencv)
- 让Python在Android系统上飞一会儿:第三节 在电脑上编写程序在手机上运行
- 高质量C /C编程指南---附录B :C /C试题和答案
- [CMake] 官方文档 和 FAQ