የሚሰራ ቦሜራንግ ሌትኮድ መፍትሄ


የችግር ደረጃ ቀላል
ውስጥ በተደጋጋሚ ተጠየቀ google
ሒሳብ

የችግሩ መግለጫ

በዚህ ችግር ውስጥ በ XY 2-D አውሮፕላን ውስጥ የሦስት ነጥቦች ስብስብ ተሰጥቶናል ፡፡ ቡሜንግንግም ሆኑ አልመረጡ መመለስ አለብን ፣ እነሱም ሶስቱም ቢሆኑ ልዩ ነጥቦችን እና አድርግ አይደለም ቀጥ ያለ መስመር ይፍጠሩ.

ለምሳሌ

Points = {{1 , 2} , {2 , 6} , {1 , 2}}
false
Points = {{1 , 1} , {2 , 3} , {6 , 7}}
true

የመጀመሪያው ግቤት ከ 3 ውስጥ ሁለት ተመሳሳይ ነጥቦችን ይ ,ል ፣ ስለሆነም ትክክለኛ ቡሜራንግ አይደለም እናም ሐሰትን እናተምበታለን ፡፡ ሁለተኛው ሙከራ ቀጥ ያለ መስመር የማይፈጥሩ 3 ልዩ ልዩ ነጥቦችን ይ andል እና እውነተኛ እናተምታለን ፡፡

የሚሰራ ቦሜራንግ ሌትኮድ መፍትሄ

አቀራረብ (ተዳፋት ሙከራ)

በችግሩ ውስጥ ቀጥ ያለ መስመር ከሆነ ያረጋግጡ፣ ሦስት ልዩ ልዩ ነጥቦችን የሚያመለክቱት በእያንዳንዱ ጥንድ ነጥቦች የተሠራው መስመር ተዳፋት ተመሳሳይ ከሆነ ብቻ ነው ፡፡ እዚህ እኛ ማረጋገጥ ያስፈልገናል

  • ነጥቦቹ የተለዩ ከሆኑ
  • ነጥቦቹ በቀጥታ መስመር ላይ አይዋሹም

ማናቸውም ጥንድ ነጥቦች ተመሳሳይ ከሆኑ ከዚያ የተሰጠው ግቤት የሁለትዮሽ ፈተናውን ያልፋል ፣ ምክንያቱም ማናቸውም 2 ነጥቦች (ወይም አንድ ነጠላ ነጥብ) ሁል ጊዜም ተመሳሳይ ናቸው ፡፡ ስለዚህ የተዳፋት እኩልነትን ማረጋገጥ ብቻ ያስፈልገናል ፡፡ ልብ ይበሉ ማናቸውም ሶስት ነጥቦች ፣ P1 ፣ P2 እና P3 ቀጥታ መስመር ከሆኑ እኛ አለን

(y2 - y1): (x2 - x1) :: (y3 - y2): (x3 - x2), ወይም

(y2 - y1) * (x3 - x2) = (x2 - x1) * (y3 - y2)

x1, x2, x3, y1, y2, y3 የት የ P1, P2 እና P3 ተመሳሳይ x እና t መጋጠሚያዎች ናቸው.

አልጎሪዝም

  1. Dx1 = ልዩነትን ያስጀምሩ x- መጋጠሚያዎች የመጀመሪያዎቹ ሁለት ነጥቦች እና dy1 = የ y-መጋጠሚያዎች የመጀመሪያዎቹ ሁለት ነጥቦች
  2. በተመሳሳይ ፣ ያከማቹ dx2 = ልዩነት y-መጋጠሚያዎች የመጨረሻዎቹ ሁለት ነጥቦች እና dy2 = የ y-መጋጠሚያዎች የመጨረሻዎቹ ሁለት ነጥቦች
  3. መመለስ ከሆነ ((dx1 * dy2)! = (Dx2 * dy1))) (ተዳፋት ሙከራ ሁኔታ)
  4. ውጤቱን ያትሙ

ትክክለኛ የ Boomerang Leetcode መፍትሔ ተግባራዊነት

C ++ ፕሮግራም

#include <bits/stdc++.h>
using namespace std;

bool isBoomerang(vector <vector <int> > &points)
{
    int dx1 = (points[1][0] - points[0][0]);
    int dy1 = (points[1][1] - points[0][1]);
    int dx2 = (points[2][0] - points[1][0]);
    int dy2 = (points[2][1] - points[1][1]);

    return (dx1 * dy2) != (dy1 * dx2);
}

int main()
{
    vector <vector <int> > points = {{1 , 1} , {2 , 3} , {6 , 7}};
    if(isBoomerang(points))
        cout << "true\n";
    else
        cout << "false\n";
    return 0;
}

የጃቫ ፕሮግራም

class valid_boomerang
{
    public static void main(String args[])
    {
        int[][] points = {{1 , 1} , {2 , 3} , {6 , 7}};
        if(isBoomerang(points))
            System.out.println("true");
        else
            System.out.println("false");
    }

    static boolean isBoomerang(int[][] points)
    {
        int dx1 = (points[1][0] - points[0][0]);
        int dy1 = (points[1][1] - points[0][1]);
        int dx2 = (points[2][0] - points[1][0]);
        int dy2 = (points[2][1] - points[1][1]);

        return (dx1 * dy2) != (dy1 * dx2);
    }
}
true

የተወሳሰበ Boomerang Leetcode መፍትሔ ውስብስብነት ትንተና

የጊዜ ውስብስብነት

ኦ (1) የማያቋርጥ የሥራ ክንዋኔዎችን ስናከናውን ፡፡

የቦታ ውስብስብነት

ኦ (1) የማያቋርጥ የማስታወሻ ቦታ እንደምንጠቀም ፡፡