报告错误
如果你发现该网页中存在错误/显示异常,可以从以下两种方式向我们报告错误,我们会尽快修复:
- 使用 CS Club 网站错误 为主题,附上错误截图或描述及网址后发送邮件到 286988023@qq.com
- 在我们的网站代码仓库中创建一个 issue 并在 issue 中描述问题 点击链接前往Github仓库
题目描述
题目给一个N,然后题目再给N个数,找出(i,j)的数量,使得Ni!=Nj,且i<j。
例子
3
1 7 1
i = 0; j = 1
i = 1; j = 2
题目思路
N个数本来有N(N-1)种组合,但是因为有i<j的条件,所以一共只有N(N-1)/2种组合,然后将每一种数都存进一个hashmap里面,遍历hashmap里的value然后再将总的次数减去两数一样的次数,就是答案。
复杂度O(N)
代码实现
import java.util.*;
import java.io.*;
public class swapped{
public static void main ( String [] args){
Scanner in = new Scanner(System.in);
int time = in.nextInt();
HashMap<Integer,Long>a = new HashMap<Integer,Long>();
for ( int i = 0;i<time;i++){
int num = in.nextInt();
if ( a.containsKey(num)){
a.put(num, a.get(num)+1);
}else{
a.put(num, 1L);
}
}
Long count = (long)time*(time-1)/2L;
for(long number:a.values()){
count-=number*(number-1)/2;
}
System.out.println(count);
}
}
有一个地方要注意count的地方,一开始的时候一定要先强制转换成long要不然答案会出错