LeetCode 1512 好数对的数目

/**
 * 1512. 好数对的数目
 *
 * 给你一个整数数组 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
 * 解释:数组中的每组数字都是好数对
 * 示例 3:
 *
 * 输入:nums = [1,2,3]
 * 输出:0
 *  
 *
 * 提示:
 *
 * 1 <= nums.length <= 100
 * 1 <= nums[i] <= 100
 *
 * 来源:力扣(LeetCode)
 * 链接:https://leetcode-cn.com/problems/number-of-good-pairs
 * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
 */
public class Eg3 {

    public static void main(String[] args) {
        //解题思路,计算出相同的数的个数,然后直接用公式算出数对的数量(有规律的)
        //1-0     1-1                                    1 0
        //2-1     2-1 + 1-1                              2 1
        //3-3     3-1 + 2-1 + 1-1                        3 1+2
        //4       4-1 +3-1 + 2-1 + 1-1                   4 1+2+3
        //n       n-1 + n-2 +...+ n-n                    n 1+2+3 +...+n-1
        // n*n- (1+n)*n/2                                   (n-1)*n/2
        // 2n*n - (1+n)*n -> (n-1)*n/2
       int[] nums= new int[]{5,5,1,77,96,96,89,80,12,23,1,6,3,66,39,88,48,38,44,32,44,36,60,87,53,77,72,49,13,39,60,60,71,68,80,75,79,38,4,14,59,75,6,91,87,95,25,55,83,18,26,59,53,100,42,96,76,22,21,4,22,46,34,39,98,82,54,73,52,33,47,73,54,23,82,98,13,51,52,1,96,69,76};
        System.out.println(nums.length);
       System.out.println(numIdenticalPairs(nums));

    }

    public static int numIdenticalPairs(int[] nums) {
        int[] sum  = new int[101];
        int count =0;
        for (int num : nums) {
            sum[num]++;
            count += sum[num]-1;
        }
        return count;
    }
}

©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页