1.自然考虑双重循环,复杂度O(n2)不允许。
2.发现一个关键性质:ai的和小于等于1e5 , 那么对ai 去重之后不同数的个数最多为1e5个。 发现这个性质以后,可以直接对去重后的集合双重循环暴力。显然复杂度O(值域) ,可过本题。
Python代码
在一个小镇上,有一个叫做小红的年轻人,他喜欢玩数学游戏和解决难题。
某一天,他拿到了一个整数数组,感到很兴奋,因为他喜欢研究数列和数论。但是,他很快发现这个数组并不像他之前接触过的那些简单的数列。这个数组中的数似乎没有规律可循,让他感到很困惑。
他一时无法想出什么有趣的问题,于是他决定尝试解决一个经典的问题:
能否找到数组中的任意一个数,它能由数组中另外两个数的和得到,即对于数组中每个数 ai ,能不能找到另外的两个数 aj 和 ak 使得 ai=aj+ak? (j,k可以相等)。
第一行输入一个正整数 n ,代表数组长度
第二行输入 n 个正整数 ai ,代表数组的每个元素。
1<n<105
所有 ai 的总和不超过 105
输出 n 行,每行输出一个字符串,第 i 行代表查询第 i 个数的答案。
如果第 i 个元素可以表示为两个元素之和,请输出 "Yes"
,否则输出 "No"
。
输入
6
2 4 6 7 8 3
输出
No
Yes
Yes
Yes
Yes
No