← Static tasks

1037. Valid Boomerang

leetcode easy

#array#csharp#easy#leetcode

Task

Если задан массив points, где points[i] = [xi, yi] представляет точку на плоскости X-Y, верните true, если эти точки являются бумерангом. Бумеранг - это набор из трех точек, которые отличаются друг от друга и не являются прямой линией.

Пример:

Input: blocked = [[0,1],[1,0]], source = [0,0], target = [0,2]

Output: false

C# solution

matched/original
public class Solution {
    public bool IsBoomerang(int[][] points) {
        int x1 = points[0][0], y1 = points[0][1];
        int x2 = points[1][0], y2 = points[1][1];
        int x3 = points[2][0], y3 = points[2][1];
        return (x1 != x2 || y1 != y2) && 
               (x1 != x3 || y1 != y3) && 
               (x2 != x3 || y2 != y3) && 
               (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) != 0;
    }
}

C++ solution

auto-draft, review before submit
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public bool IsBoomerang(int[][] points) {
        int x1 = points[0][0], y1 = points[0][1];
        int x2 = points[1][0], y2 = points[1][1];
        int x3 = points[2][0], y3 = points[2][1];
        return (x1 != x2 || y1 != y2) && 
               (x1 != x3 || y1 != y3) && 
               (x2 != x3 || y2 != y3) && 
               (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) != 0;
    }
}

Java solution

matched/original
var isBoomerang = function(points) {
    let [x1, y1] = points[0];
    let [x2, y2] = points[1];
    let [x3, y3] = points[2];
    return (x1 !== x2 || y1 !== y2) && 
           (x1 !== x3 || y1 !== y3) && 
           (x2 !== x3 || y2 !== y3) && 
           (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) !== 0;
};

JavaScript solution

matched/original
var isBoomerang = function(points) {
    let [x1, y1] = points[0];
    let [x2, y2] = points[1];
    let [x3, y3] = points[2];
    return (x1 !== x2 || y1 !== y2) && 
           (x1 !== x3 || y1 !== y3) && 
           (x2 !== x3 || y2 !== y3) && 
           (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) !== 0;
};

Python solution

matched/original
def isBoomerang(points):
    (x1, y1), (x2, y2), (x3, y3) = points
    return (x1 != x2 or y1 != y2) and (x1 != x3 or y1 != y3) and (x2 != x3 or y2 != y3) and (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) != 0

Go solution

matched/original
func isBoomerang(points [][]int) bool {
    x1, y1 := points[0][0], points[0][1]
    x2, y2 := points[1][0], points[1][1]
    x3, y3 := points[2][0], points[2][1]
    return (x1 != x2 || y1 != y2) && (x1 != x3 || y1 != y3) && (x2 != x3 || y2 != y3) && (x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)) != 0
}

Explanation

Algorithm

Проверка уникальности точек:

Убедитесь, что все три точки уникальны. Если любые две точки совпадают, то это не бумеранг.

Проверка на коллинеарность:

Используйте определитель (или площадь параллелограмма) для проверки, находятся ли три точки на одной прямой. Если площадь параллелограмма, образованного тремя точками, равна нулю, то точки коллинеарны.

Результат:

Если точки уникальны и не коллинеарны, верните true. В противном случае, верните false.

😎