目录

AtCoder C 206

AtCoder

Leon | 23 Jun 2021

题目描述

题目给一个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要不然答案会出错


评论区