使用map存储所有元素的出现次数,对于每一个元素k以及其出现次数v,考虑S-k的元素出现次数为y,将其相乘v *y即是对应的i和j的对数,将全部对应的k累加即可,由于i和j没有固定大小,所以最后不需要除以2。
Java
小蓝正在整理一组实验数据,他有一个长度为 n 的整数序列,以及一个目标整数值 S。对于序列中的任意两个下标 i 和 j(下标从 1 开始),如果对应位置的数字之和等于 S,即 ai+aj=S,则称 (i,j) 是一个“好对”。注意这里下标对是有顺序的,(i,j) 与 (j,i) 视为不同的对,并且允许 i 和 j 相等。
现在请你帮忙计算,对于给定的序列和 S,一共能构成多少个“好对”。
数据约束:序列长度 n 不超过 105,目标整数 S 满足 1≤S≤109,序列中的每个整数均在 1 到 105 之间。
第一行包含两个整数 n 和 S,分别表示序列的长度与目标和。 第二行包含 n 个整数,表示序列中的元素。数之间均用空格分隔。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.