题目
给你一个整数数组 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
思路
使用双指针遍历数组,暴力破解的方法不再赘述。
声明两个初始化指针变量 index1 和 index2 ,首先将 index2 递增到与nums 长度相等,然后开始递增 index1 ,每次 index2=index1+1,直至两个指针都小于等于 nums 长度。
Go代码示例
func numIdenticalPairs(nums []int) int {
nice := 0
index1 := 0
index2 := 0 // 声明两个初始化指针变量
// index1 和 index2 都不能大于 nums 的长度
for index1 < len(nums) && index2 < len(nums) {
if index1 < index2 {
if nums[index1] == nums[index2] {
nice++
}
}
// 首先每次递增 index2 的值
index2++
// index2 的值等于 nums 长度s时,递增 index1 并重新f赋值 index2
if index2 == len(nums) {
index1++
index2 = index1+1
}
}
return nice
}