【LeetCode】

  1. 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。原因待查:异步、逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值