题意:求一个平面中,一个点到其他两个点的距离相等的点,这样的点一共有多少组。
思路:求出所有两两点之间的距离,用hash统计距离相同的点。
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points) {
vector<vector<double> > distance;
for(int i = 0; i < points.size(); ++ i) {
vector<double> temp;
for(int j = 0; j < points.size(); ++ j) {
temp.push_back(dis(points[i], points[j]));
}
distance.push_back(temp);
}
int re = 0;
for(int i = 0; i < points.size(); ++ i) {
map<double, int> mym; //cout << "here" << endl;
for(int j = 0; j < points.size(); ++ j) {
mym[distance[i][j]] ++;
}
std::map<double, int>::iterator it;
for(it = mym.begin(); it != mym.end(); ++ it) {
if(it->second > 1) re += (it->second - 1) * it->second;
}
}
return re;
}
double dis(pair<int, int> a, pair<int, int> b) {
double dx = a.first - b.first;
double dy = a.second - b.second;
return sqrt(dx * dx + dy * dy);
}
};