- Max Points on a Line Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
使用JavaScript实现,代码如下:
/**
* Definition for a point.
* function Point(x, y) {
* this.x = x;
* this.y = y;
* }
*/
/**
* @param {Point[]} points
* @return {number}
*/
var kOfLine = {}
// {
// k1:[{point1,point2},{pointM,pointN}]
// k2:[{},{}]
// }
var getK = function(point1,point2){
if(point1.y==point2.y){
return {"k":0,"h":point1.x}
}else{
var k=(point2.y-point1.y)/(point2.x-point1.x)
return {"k":k,"h":point2.y-k*point2.x}
}
}
var sameInArray = function(array){
var arrayVal = {}
var max = 0
for (var i=0 ;i< array.length;i++){
if(arrayVal[array[i].h] === undefined){
arrayVal[array[i].h] = 1
}else{
arrayVal[array[i].h] = arrayVal[array[i].h] +1
}
}
for(var h in arrayVal){
if(h>max){
max = h
}
}
return max
}
var maxPoints = function(points) {
if (points.length<3){
return points.length
}else{
for (var point1 in points){
// same = true
for (var point2 in points){
// 排除相同
// y = point1.y-point2.y
// x = point1.x-point2.y
if(point1.x!=point2.x || point1.y!=point2.y){
result =getK(point1,point2)
k = result.k
h = result.h
KOfLine[k].append({"h":h,"1":point1,"2":point2})
}
// 斜率:0,k,无穷大。
// 计算经过 X 轴:x0 = y2-kx2;
}
}
}
max = 0
for( var key in kOfLine){
var l = sameInArray(kOfLine(key))
if(l>max){
max = l
}
}
return max
};
思路应该是对的,但是,运行结果为0。原因待查:异步、逻辑