思路
- 暴力,计算出全部点之间的距离
- 匹配距离相同的点
struct Node {
int i;
int j;
double len;
};
int cmp(const void *a,const void *b){
struct Node c = *(struct Node*)a;
struct Node d = *(struct Node*)b;
return c.len-d.len;
}
int numberOfBoomerangs(int** points, int pointsSize, int* pointsColSize){
int i=0;
struct Node dp[pointsSize*pointsSize];
int k =0;
//memset(dp, 0, sizeof(int)*pointsSize*pointsSize);
for(i=0;i<pointsSize;i++){
for(int j=i+1;j<pointsSize;j++){
dp[k].i=i;
dp[k].j=j;
dp[k].len =(points[i][1]-points[j][1])*(points[i][1]-points[j][1])+(points[i][0]-points[j][0])*(points[i][0]-points[j][0]);
k++;
}
}
int res = 0;
qsort(dp, k, sizeof(dp[0]), cmp);
for(i=0;i<k;i++){
for(int j=i+1;j<k;j++){
if(dp[i].len==dp[j].len){
if(dp[i].j==dp[j].i||dp[i].i==dp[j].j||dp[i].i==dp[j].i||dp[i].j==dp[j].j)
res++;
}//排序之后,如果距离不相等,那就立刻进行下一次的查找,不然超时
else break;
}
}
return res*2;
}