好数对的数目

给你一个整数数组 nums 。

如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。

返回好数对的数目。

示例 1:

输入:nums = [1,2,3,1,1,3]
输出:4
解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始
示例 2:

输入:nums = [1,1,1,1]
输出:6
解释:数组中的每组数字都是好数对

思路

1,定义一个map,key为元素值,val为元素下标的list集合

2,遍历数组,将相同值的元素下标都放到list中

3,计算list集合的排列数组个数,是个以1为首项,公差为1的等差数列,个数为list.size - 1

代码

 public int numIdenticalPairs(int[] nums) {
        Map<Integer,List<Integer>> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            List<Integer> vals = map.get(nums[i]);
            if(vals == null){
                vals = new ArrayList<>();
                map.put(nums[i],vals);
            }
            vals.add(i);
        }
        int count = 0;
        for (Map.Entry<Integer, List<Integer>> entry : map.entrySet()) {
            List<Integer> list = entry.getValue();
            int size = list.size();
            count += size * (size - 1) / 2;
        }

        return count;
    }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-good-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/dongma/p/14219375.html