直线上最多的点数

给定一个二维平面,平面上有 个点,求最多有多少个点在同一条直线上。

function maxPoints(points) {
    if(points.length == 1 || points.length == 2){
        return points.length
    }
    let number = 0
    for(let i = 0;i < points.length - 1;i++){
        let item = points[i]
        for(let j = i + 1;j < points.length;j++){
            let jItem = points[j]
            let r,n,num = 0;
            if(jItem[0] == item[0]){
                for(let k = 0;k < points.length;k++){
                    let kItem = points[k]
                    if(kItem[0] == item[0]){
                        num++
                    }
                }
            }else if(jItem[1] == item[1]){
                for(let k = 0;k < points.length;k++){
                    let kItem = points[k]
                    if(kItem[1] == item[1]){
                        num++
                    }
                }
            }else{
                r = (jItem[1] - item[1]) / (jItem[0] - item[0])
                n = ((jItem[1] + item[1]) - ((jItem[0] + item[0]) * r)) / 2
                for(let k = 0;k < points.length;k++){
                    let kItem = points[k]
                    if(kItem[1] == (kItem[0] * r + n)){
                        num++
                    }
                }
            }
            if(num > number){
                number = num
            }
        }
    }
    return number
}

else if(jItem[0] == item[0] && jItem[1] == item[1]){
  for(let k = 0;k < points.length;k++){
    let kItem = points[k]
    if(kItem[0] == item[0] && kItem[1] == item[1]){
      num++
    }
  }
}

判断了x轴的值相同或y轴的值相同,就不用判断同一点了(也就是x轴、y轴的值都相同)

r = (jItem[1] - item[1]) / (jItem[0] - item[0])  
n = ((jItem[1] + item[1]) - ((jItem[0] + item[0]) * r)) / 2

Leecode提交未通过,求得r、n的值存在精度丢失的问题

posted @ 2020-06-17 22:50  671_MrSix  阅读(219)  评论(0编辑  收藏  举报