直接统计
思路:
-
数据范围为 -1000 ~ 1000,开辟一个长度为 1010 的数组,保存每个数绝对值出现的次数。
-
因为题目说了数字不重复,当某个数字绝对值出现次数为 2 的时候,就是一对相反数。
代码:
#include <iostream>
using namespace std;
const int N = 1010;
int a[N];//保存每个数字绝对值出现的次数
int main()
{
int n;
cin >> n;
int res = 0;//记录相反数的个数
for(int i = 1; i <= n ; i++)
{
int x;
cin >> x;
a[abs(x)] ++;//输入数字绝对值次数 +1
if(a[abs(x)] == 2)//出现次数为 2,即为一对相反数。
res++;
}
cout << res;
}
每个数的绝对值不过1000,说的是数值大小不是个数吧,个数不是N吗,N是500.但是为什么我用N就段错误了
数组的每个元素对应的是数的绝对值大小,当然要1000个,不然你输入一个999的数,你存在哪里?
要加个
cmath
头文件,不然CCF官网过不了algorithm
也可以,好像用max
min
等等最好都加一个algorithm
C++ min,max所在头文件 algorithm
双指针就很好啊
时间复杂度好像不能做到O(n)