问题描述
问题描述
有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。
输入格式
第一行包含一个正整数 N。(1 ≤ N ≤ 500)。
第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。
输出格式
只输出一个整数,即这 N 个数中包含多少对相反数。
样例输入
5
1 2 3 -1 -2
样例输出
2
思路
可以暴力解,枚举任意两个数的和。但考虑到时间复杂度,先排序再用双指针法更优
解法
#input
n = eval(input())
line = input()
nums = [eval(num) for num in line.split()]
assert n == len(nums)
#print(nums)
#sort
nums = sorted(nums)
#print(nums)
#count
count = 0
l , r = 0 , n - 1
while l < r:
if nums[l] + nums[r] == 0:
count += 1
l += 1
r -=1
elif nums[l] + nums[r] < 0:
l += 1
else:
r -= 1
print(count)
复杂度O(nlogn)