每日一题——LeetCode1073

每日一题——LeetCode1073_第1张图片

方法一 个人方法:

判断一下三个点是否有重复的

然后用前两点确定一条直线方程,第三个点如果也满足该直线方程则说明三点共线

var isBoomerang = function(points) {
    var  x1=points[0][0],y1=points[0][1],
         x2=points[1][0],y2=points[1][1],
         x3=points[2][0],y3=points[2][1]

    if(x1==x2&&y1==y2 || x1==x3&&y1==y3 ||x2==x3&&y2==y3)   
            return false

    else{
        var A=y1-y2,
            B=x2-x1,
            C=x1*y2-x2*y1

         if((A*x3+B*y3+C)==0) 
                return false;
            else 
                return true;
    }
    
};

 消耗时间和内存情况:

每日一题——LeetCode1073_第2张图片

方法二 官方解法——向量叉乘:

计算第一个点到第二点、第三点的两条向量,这两个向量叉乘不为0则说明三点不在一条直线

var isBoomerang = function(points) {
    const v1 = [points[1][0] - points[0][0], points[1][1] - points[0][1]];
    const v2 = [points[2][0] - points[0][0], points[2][1] - points[0][1]];
    return v1[0] * v2[1] - v1[1] * v2[0] != 0;
};

消耗时间和内存情况:

每日一题——LeetCode1073_第3张图片

你可能感兴趣的:(每日一题,算法,javascript,leetcode)