Когда я решаю этот вопрос ( 149. Максимальное количество очков на линии ) в коде leetcode, при выполнении этого случая возникает ошибка:
Input [[0,0],[94911151,94911150],[94911152,94911151]]
Output 3
Expected 2
Это мой код:
/**
* Definition for a point.
* struct Point {
* int x;
* int y;
* Point() : x(0), y(0) {}
* Point(int a, int b) : x(a), y(b) {}
* };
*/
class Solution {
public:
int maxPoints(vector<Point>& points) {
int size = points.size();
int ans = 0;
if (size == 0) return 0;
unordered_map<double, int> mp;
double k;
for (int i = 0; i < size; ++i) {
int num = 0;
for (int j = i + 1; j < size; ++j) {
if (points[i].x == points[j].x && points[i].y == points[j].y) {
num++;
continue;
}
// my question in below code.
// how can I get the hash key according to slope
if (points[j].x - points[i].x != 0)
k = (double)(points[j].y - points[i].y) / (double)(points[j].x - points[i].x); // calculate the slope.
else k = INT_MAX;
mp[k]++;
}
if (mp[k] == 0) mp[k] = 1, num--;
for (auto it = mp.begin(); it != mp.end(); ++it) {
if (it->second > ans) {
ans = it->second;
ans += num;
}
}
mp.clear();
}
return ans+1;
}
};
В приведенном выше тестовом случае, когда он вычисляет наклон с [0,0]
и [94911151,94911150]
, он возвращается k = 1
.Поэтому я хочу знать, как получить правильный ключ хеша для решения этой проблемы?