package array;
import java.util.HashMap;
import java.util.Map;
/**
* @ProjectName: leetcode
* @Package: array
* @ClassName: Array447
* @Author: markey
* @Description:
* @Date: 2020/5/17 23:12
* @Version: 1.0
*/
public class Array447 {
public int numberOfBoomerangs(int[][] points) {
int count = 0;
for (int[] middle: points) {
// è®°å½æ¯ä¸ªå
¶ä»ç¹å°è¿ä¸ªç¹çè·ç¦»ï¼å¦æè·ç¦»ç¸åçç¹æn个ï¼ååææ çä¸ªæ°æ¯nä¸é2个çç§ç±»æ°
Map map = new HashMap<>();
for (int[] point: points) {
if (point[0] == middle[0] && point[1] == middle[1]) {
// ç¸åç¹å¿½ç¥
continue;
}
double distance = distance(middle, point);
map.put(distance, map.getOrDefault(distance, 0) + 1);
}
// 计ç®ä¸ªæ°
for (double distance : map.keySet()) {
count += map.get(distance) * (map.get(distance) - 1);
}
}
return count;
}
// æ´åéåï¼è¶
æ¶
public int numberOfBoomerangs1(int[][] points) {
int count = 0;
for (int[] middle: points) {
for (int[] left: points) {
if (left[0] == middle[0] && left[1] == middle[1]) {
// ç¸åç¹å¿½ç¥
continue;
}
double distance = distance(middle, left);
for (int[] right: points) {
if (left[0] == right[0] && left[1] == right[1]) {
// ç¸åç¹å¿½ç¥
continue;
}
if (distance(middle, right) == distance) {
count++;
}
}
}
}
return count;
}
private double distance(int[] point1, int[] point2) {
return Math.pow((point1[0] -point2[0]), 2.0) + Math.pow((point1[1] -point2[1]), 2);
}
}