python 整数对查找
题目描述 请设计一个高效算法,找出数组中两数之和为指定值的所有整数对。 给定一个int数组 A 和数组大小 n 以及需查找的和 sum ,请返回和为sum的整数对的个数。保证数组大小小于等于3000。 测试样例: [1,2,3,4,5],5,6 返回:2 # -*- coding:utf-8 -*- import collections class FindPair: def countPairs(self, A, n, tsum): res = 0 setA = list(set(A)) setA.sort() start , end = 0 , len(setA)-1 dd = collections.defaultdict(int) for i in A : dd[i] += 1 while start < end : if setA[start]+setA[end] < tsum : start += 1 elif setA[start]+setA[end] > tsum : end -= 1 else : res += dd[setA[start]]*dd[setA[end]] start += 1 end -= 1 if setA[start]*2 == tsum : res += dd[setA[start]]*(dd[setA[start]]-1)//2