中年|LeetCode基础算法题第184篇:好搭档的数量


【中年|LeetCode基础算法题第184篇:好搭档的数量】
LeetCode 1512. 好搭档的数量(Number of Good Pairs)
问题描述: 给定一个整数数组 nums 。
对于其中的两个元素nums[i]和nums[j] , 如果nums[i] == nums[j] 并且 i &lt j 则称呼它们为"好搭档" 。
返回nums中"好搭档"的数量 。
注:
· 1 &lt= nums.length &lt= 100
· 1 &lt= nums[i] &lt= 100
示例:
中年|LeetCode基础算法题第184篇:好搭档的数量
本文插图

C语言实现: 对于某一个元素来说 , 它的所谓的“好搭档”就是和它的值相等的其他元素 , 那么这些元素之间两两组成一对“好搭档” , 假设有n个相同的元素 , 根据排列组合的原理很容易就知道对于数值n来说 , 这样的“好搭档”数是n*(n-1)/2, 也就是0+1+2+...+(n-1)这样一个等差数列的和 , 注意这个数列的形式 。
如果我们统计出所有不同元素的数量 , 根据上面的结论就可以求出nums中所有“好搭档”的数量 。
所以首先需要用一个容器统计所有不同元素的数量 , 因为题目描述中已经说明 , nums中是1~100的数字 , 所以我们可以用一个长度为101的数组map来做这个统计 , 其中数组map的下标对应于nums中元素的值 。
我们需不需要统计完nums后再遍历map求最终结果?实际上不需要 。

在统计nums填充map的时候 , 每次找到元素 i 的时候 map[i] 都会累加1 , 这个过程刚好形成上面的等差数列 。
所以在这个过程中就可以不断统计“好搭档”的数量 。 等等nums遍历完 , map也填充好了 , 总的“好搭档”数也求出来了 。
代码如下:
中年|LeetCode基础算法题第184篇:好搭档的数量
本文插图

中年|LeetCode基础算法题第184篇:好搭档的数量
本文插图

Java语言实现: Python 的实现和C语言的实现基本一致 。
代码如下:
中年|LeetCode基础算法题第184篇:好搭档的数量
本文插图

中年|LeetCode基础算法题第184篇:好搭档的数量
本文插图

Python语言实现: Python 的实现和C语言的实现基本一致 。
代码如下:
中年|LeetCode基础算法题第184篇:好搭档的数量
本文插图

中年|LeetCode基础算法题第184篇:好搭档的数量
本文插图


    推荐阅读