给你一个整数数组 nums 。
如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
返回好数对的数目。
暴力解法
时间复杂度O(n^2)
package Algorithm;
public class numIdenticalPairs {
public int numIdenticalPairs(int[] nums) {
int len = nums.length;
int count = 0;
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++){
if (nums[i] == nums[j] && i < j){
count++;
}
}
}
return count;
}
}
使用哈希表
package Algorithm;
import java.util.HashMap;
import java.util.Map;
public class numIdenticalPairs2 {
public int numIdenticalPairs(int[] nums) {
Map<Integer, Integer> m = new HashMap<Integer, Integer>();
for (int num : nums) {
//getOrDefault方法为哈希表中若有该key则返回该key对应的value,若无则返回defaultValue
m.put(num, m.getOrDefault(num, 0) + 1);
}
int count = 0;
//使用EntrySet遍历效率高于直接用KeySet
for (Map.Entry<Integer, Integer> entry : m.entrySet()) {
int v = entry.getValue();
count += (v - 1) * v * 0.5;
}
return count;
}
}