思想为:统计每个点的各个斜率的直线上有多少个点
C++代码:
#include <iostream>
#include <vector>
#include <map>
#include <cstdlib>
#include <ctime>
// 随机数通用公式:a + rand() % n;其中的a是起始值,n是整数的范围
/* 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)
*/
#define RANDOM(a, b) ( (rand() % ((b)-(a) + 1)) + (a) ) // 计算 [a, b] 之间的随机整数
using namespace std;
struct Point2D {
Point2D(int X, int Y) : x(X),y(Y) {}
int x;
int y;
};
int maxPoints(const vector<Point2D>& pointVec) {// 计算二维平面上,共线最多的点数。
if(pointVec.size() <= 2) return pointVec.size();
unsigned int Max = 0;
for(vector<Point2D>::size_type i=0; i < pointVec.size(); i++) {
map<double, unsigned int> m;// <斜率, 点数>
unsigned int duplicate = 0/*