好数对的数目
题目:
这是一道简单题,所以一开始我就用的最简单的思路来进行,双重for循环遍历,然后比较得到答案,暴力但是有效。
代码如下:
public static int numIdenticalPairs(int[] nums) {
int counter =0;
for (int i = 0; i <nums.length ; i++) {
for (int j = 0; j < nums.length; j++) {
if (nums[i] == nums[j] && i<j){
counter++;
}
}
}
return counter;
}
leetcode执行结果:
显然结果不是令人满意的
所以分析题目,这道题虽然说的是好数对,但是仔细看来,实际上就是判断数值是否相等。因为我们循环遍历本来就是一个从前往后的过程,所以这道题目,我们就可以化简为:统计相等的数对,如果有两个相等的数对,那么计数器+1.
代码如下:
public int numIdenticalPairs2(int[] nums) {
int ans = 0;
// arr.length<=100
int[] temp = new int[100];
//遍历数组
for (int num : nums) {
ans += temp[num - 1]++;
}
return ans;
}
leetcode执行结果: