51nod 1267 4个数和为0 思路:哈希map+避免重复的点
题目:
总结大佬们的思路:
思路1:所有数两两求和,存入map中,每次判断有没有相反数被标记过。
思路2:对所有数排序,排完所有数两两求和,结果正好是排好序的。然后扫一遍,二分查找看之前有没有相反数存在。
思路1时间复杂度O(n^2),空间复杂度O(n^2)
思路2时间复杂度O(n^2log(n)),空间复杂度O(n^2)
两个都可以过,不卡时间。
要注意的一点是,要标记是哪两个数的和。
否则可能会重复计算某个数,这就不是四个数的和为0了。
代码:
#include <bits\stdc++.h>
using namespace std;
typedef long long ll; //l表示较小的索引,r表示较大的索引
//用来判断是否重复
struct node{
int l;int r;
}; int a[];
map<ll,node> m; int main() {
int n;
cin >> n;
for(int i = ;i < n; i++){
cin >> a[i];
}
for(int i = ;i < n; i++){
for(int j = i+;j < n; j++){
ll k = a[i]+a[j];
//如果m[-k](当前和的相反数)没有被标记过
if(m[-k].l != ||m[-k].r != ){
//如果m[-k]不重复
if(m[-k].l != i && m[-k].r != i && m[-k].l != j && m[-k].r != j){
cout << "Yes" << endl;
return ;
}
}
node x;
x.l = i;x.r = j;
m[k] = x;
}
}
cout << "No" << endl;
return ;
}
// writen by zhangjiuding
虽然代码过了,但是有一种情况没有考虑到,可能是数据比较弱。
就是m[k]可能要存多组不同的索引,代码起码要增加十几行。
51nod 1267 4个数和为0 思路:哈希map+避免重复的点的更多相关文章
- 51Nod 1267 4个数和为0 二分
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No".Input第1行,1个数N,N为数组的长度(4 <= ...
- [51nod] 1267 4个数和为0 暴力+二分
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 < ...
- 51nod 1267 4个数和为0
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出&qu ...
- 51 nod 1267 4个数和为0
1267 4个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 取消关注 给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出& ...
- 51Nod 1090 3个数和为0(暴力)
1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...
- 51Nod 1090 3个数和为0
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090 思路:排序 三个for循环 但是要控制循环 不能从头开 ...
- 51nod 1090 3个数和为0【二分】
1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...
- 51nod——T1267 4个数和为0
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267 题目描述 给出N个整数,你来判断一下是否能够选出4个数,他们的和 ...
- 51Nod 1090 3个数和为0 set 二分优化
给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...
随机推荐
- Flask上下文管理机制
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...
- Spark SQL 编程API入门系列之SparkSQL的入口
不多说,直接上干货! SparkSQL的入口:SQLContext SQLContext是SparkSQL的入口 val sc: SparkContext val sqlContext = new o ...
- Python 对象初识
# Demo1class Penson: animal = 'big mom' plant = 'flower' def __init__(self,name,age,sex,job): self.n ...
- Servlet基础(二)
1.什么是Servlet java类,提供web形式的访问 servlet就是按照javaee中servlet规范所编写的java类 能够被浏览器通过URL形式访问到 2.怎么在javae ...
- 使用 Travis-CI 的五个理由
I use the service of travis-ci now for a year. In that time the continuous integration has often poi ...
- 关于app夜间模式那点事
大半年没写过代码了 一直在忙一些其他的事情 这几天想起来看了一点 心惊肉跳的 发现好陌生 所以打算今后慢慢的拾起来 往深度和广度去发展 发现好久之前写的一个微博项目 有一个夜间模式的功能没有 ...
- c# rc4算法,加密解密类
rc4算法,原理,以密匙生成256位的密匙流,然后以车轮式滚过源数据异或加密. /* * 由SharpDevelop创建. * 用户: YISH * 日期: 04/04/2015 * 时间: 03:0 ...
- day03 Python3的安装
目录 Python的安装 Python下载 Python3安装 环境变量 添加环境变量 在CMD中运行Python Python的安装 Python可在多个操作系统(Windows,Linux,Mac ...
- 使用短信猫发送短信java代码
短信猫简单配置:https://www.cnblogs.com/Big-Boss/p/9699880.html 发送短信: package utils; import org.smslib.AGate ...
- Pyhton学习——Day36
#异步IO——Asynchronous#异步效率最高,特点:全程无阻塞# 在说明synchronous IO和asynchronous IO的区别之前,需要先给出两者的定义.# Stevens给出的定 ...