题目:

总结大佬们的思路:

思路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]可能要存多组不同的索引,代码起码要增加十几行。

最新文章

  1. 基于AngularJS的企业软件前端架构[转载]
  2. cbitmap 获取RGB CBitMap的用法
  3. Qt一个project调用还有一个project的类成员变量
  4. android-ramdisk.img分析、recovery.img&amp;boot.img执行过程
  5. 【高德地图API】从零开始学高德JS API(二)地图控件与插件——测距、圆形编辑器、鼠标工具、地图类型切换、鹰眼鱼骨
  6. Zabbix之配置文件详解
  7. JVM读书笔记PART3
  8. 【原创】java NIO FileChannel 学习笔记 FileChannel实现分析 即FileChannelImpl分析
  9. Linux磁盘热插拔命令
  10. Android开发中如何使用RecyclerView
  11. nvidia-smi 实时查看
  12. 【XSY2729】欧拉子图 无向图连通性 数学
  13. sql表连接方式
  14. java图片压缩(Thumbnails)
  15. adb连接不上手机的解决方案
  16. MySQL积累
  17. python学习之----异常处理小示例
  18. Python学习-2.安装IDE
  19. JavaScript 常用的小功能集合
  20. CNN中卷积层的计算细节

热门文章

  1. Java 系列之spring学习--springmvc搭建(四)
  2. 分布式memcache
  3. Android 中的View与ViewGroup
  4. table标签 在谷歌和ie浏览器下不同的表现效果
  5. Qwiklab&#39;实验-CloudFront, EFS, S3&#39;
  6. JS 将有父子关系的数组转换成树形结构数据
  7. BZOJ 1415 [NOI2005]聪聪与可可 (概率DP+dfs)
  8. div,span等标签支持focus/blur事件
  9. tp框架报错 Namespace declaration statement has to be the very first statement in the script
  10. css3特效第一篇--旋转的背景&amp;翻书效果