【leetcode】回旋镖的数量

 

int compare(const void* a, const void* b)
{
    return *(int*)a > *(int*)b;
}

int numberOfBoomerangs(int** points, int pointsSize, int* pointsColSize)
{
    if (points == NULL || pointsSize < 3 || pointsSize > 500) {
        return 0;
    }

    int distance[MAX_N] = {0};  // 距离数组
    int sum = 0;
    int i;    // 指针,选择锚点
    int j;    // 指针,计算距离

    for (i = 0; i < pointsSize; i++) {
        // 计算每一点到点i的距离
        for (j = 0; j < pointsSize; j++) {    
            distance[j] = (points[i][0] - points[j][0]) * (points[i][0] - points[j][0]) +
                          (points[i][1] - points[j][1]) * (points[i][1] - points[j][1]);
        }

        // 对距离按升序排序
        qsort(distance, pointsSize, sizeof(int), compare);

        int currCount = 1;  // 当前计数
        
        // 遍历排序后的距离,统计个数
        for (j = 1; j < pointsSize; j++) {
            if (distance[j] != distance[j - 1]) {
                sum += currCount * (currCount - 1);
                currCount = 1;
            } else {
                currCount++;
            }
        }
        
        // 记得统计最后一个单词
        sum += currCount * (currCount - 1);
    }
    
    return sum;
}

 

posted @ 2020-09-15 11:58  温暖了寂寞  阅读(203)  评论(0编辑  收藏  举报