Tarkista pari annetulla tuotteella

Tarkista pari annetulla tuotteella
Kokeile sitä GFG -harjoituksessa

Annetaan taulukko Arr [] - n erilliset kokonaisluvut ja a kohde Arvo Tehtävä on tarkistaa, onko taulukossa pari elementtejä, joiden tuote on yhtä suuri kuin kohde.

Esimerkkejä:  

Tulo: arr [] = [1 5 7-1 5] Kohde = 35
Lähtö: totta
Selitys: AS 5* 7 = 35 Vastaus on totta.



Tulo: arr [] = [-10 20 9 -40] tavoite = 30
Lähtö: väärennetty
Selitys: Pari ei ole olemassa tuotteen 30 kanssa

Sisältötaulukko

[Naiivi lähestymistapa] luomalla kaikki mahdolliset parit - O (n 2 ) aika ja o (1) tila

Aivan peruslähestymistapa on luoda kaikki mahdolliset parit ja tarkistaa, onko olemassa paria, jonka tuote on yhtä suuri kuin annettu tavoitearvo, sitten palauta totta . Jos tällaista paria ei ole, palaa väärennetty .

C++
   #include          using     namespace     std  ;   // Function to check if any pair exists whose product   // equals the target   bool     isProduct  (  vector   <  int  >     &  arr       long     long     target  )     {      int     n     =     arr  .  size  ();      for     (  int     i     =     0  ;     i      <     n     -     1  ;     i  ++  )     {      for     (  int     j     =     i     +     1  ;     j      <     n  ;     j  ++  )     {      if     (  1L  L     *     arr  [  i  ]     *     arr  [  j  ]     ==     target  )     {      return     true  ;      }      }      }      return     false  ;   }   int     main  ()     {      vector   <  int  >     arr     =     {  1       5       7       -1       5  };      long     long     target     =     35  ;      cout      < <     isProduct  (  arr       target  )      < <     endl  ;      return     0  ;   }   
C
   #include         #include         // Function to check if any pair exists whose product   // equals the target   bool     isProduct  (  int     arr  []     int     n       long     long     target  )     {      for     (  int     i     =     0  ;     i      <     n     -     1  ;     i  ++  )     {      for     (  int     j     =     i     +     1  ;     j      <     n  ;     j  ++  )     {      if     (  1L  L     *     arr  [  i  ]     *     arr  [  j  ]     ==     target  )     {      return     true  ;      }      }      }      return     false  ;   }   int     main  ()     {      int     arr  []     =     {  1       5       7       -1       5  };      long     long     target     =     35  ;         int     n     =     sizeof  (  arr  )     /     sizeof  (  arr  [  0  ]);      printf  (  '%d  n  '       isProduct  (  arr       n       target  ));          return     0  ;   }   
Java
   class   GfG     {      // Function to check if any pair exists whose product      // equals the target      static     boolean     isProduct  (  int  []     arr       long     target  )     {      int     n     =     arr  .  length  ;      for     (  int     i     =     0  ;     i      <     n     -     1  ;     i  ++  )     {      for     (  int     j     =     i     +     1  ;     j      <     n  ;     j  ++  )     {      if     ((  long  )     arr  [  i  ]     *     arr  [  j  ]     ==     target  )     {      return     true  ;      }      }      }      return     false  ;      }      public     static     void     main  (  String  []     args  )     {      int  []     arr     =     {  1       5       7       -  1       5  };      long     target     =     35  ;         System  .  out  .  println  (  isProduct  (  arr       target  ));      }   }   
Python
   # Function to check if any pair exists whose product   # equals the target   def   is_product  (  arr     target  ):   n   =   len  (  arr  )   for   i   in   range  (  n   -   1  ):   for   j   in   range  (  i   +   1     n  ):   if   arr  [  i  ]   *   arr  [  j  ]   ==   target  :   return   True   return   False   arr   =   [  1     5     7     -  1     5  ]   target   =   35   print  (  is_product  (  arr     target  ))   
C#
   using     System  ;   class     GfG     {      // Function to check if any pair exists whose product      // equals the target      static     bool     IsProduct  (  int  []     arr       long     target  )     {      int     n     =     arr  .  Length  ;      for     (  int     i     =     0  ;     i      <     n     -     1  ;     i  ++  )     {      for     (  int     j     =     i     +     1  ;     j      <     n  ;     j  ++  )     {      if     ((  long  )  arr  [  i  ]     *     arr  [  j  ]     ==     target  )     {      return     true  ;      }      }      }      return     false  ;      }      static     void     Main  ()     {      int  []     arr     =     {     1       5       7       -  1       5     };      long     target     =     35  ;         Console  .  WriteLine  (  IsProduct  (  arr       target  ));      }   }   
JavaScript
   // Function to check if any pair exists whose product   // equals the target   function     isProduct  (  arr       target  )     {      let     n     =     arr  .  length  ;      for     (  let     i     =     0  ;     i      <     n     -     1  ;     i  ++  )     {      for     (  let     j     =     i     +     1  ;     j      <     n  ;     j  ++  )     {      if     (  arr  [  i  ]     *     arr  [  j  ]     ===     target  )     {      return     true  ;      }      }      }      return     false  ;   }   let     arr     =     [  1       5       7       -  1       5  ];   let     target     =     35  ;   console  .  log  (  isProduct  (  arr       target  ));   

Tulos
1  

Ajan monimutkaisuus: O (n²) kahden sisäkkäisen silmukan käyttämiseksi
Aputila: O (1)

[Parempi lähestymistapa] Kahden osoitintekniikan käyttäminen - O (n log (n)) -aika ja O (1) -tilaa

Voimme käyttää myös tässä ongelmassa olevaa kaksikohtaista tekniikkaa, mutta sitä voidaan soveltaa vain lajitetuihin tietoihin. Joten lajittele taulukko ensin ja pidä kaksi osoitinta yksi osoitin alussa ( vasen ) ja toinen lopussa ( oikea ) taulukosta. Tarkista sitten näiden kahden osoittimen elementtien tuote:

  • Jos tuote on yhtä suuri kuin kohde Olemme löytäneet parin.
  • Jos tuote on vähemmän kuin kohde siirtää vasen osoitin oikea Tuotteen lisäämiseksi.
  • Jos tuote on suurempi kuin kohde siirtää oikea osoitin vasen Tuotteen vähentäminen.
C++
   #include          using     namespace     std  ;   // Function to check if any pair exists whose product equals the target.   bool     isProduct  (  vector   <  int  >     &  arr       long     long     target  )     {          // Sort the array      sort  (  arr  .  begin  ()     arr  .  end  ());      int     left     =     0       right     =     arr  .  size  ()     -     1  ;      while     (  left      <     right  )     {      // Calculate the current product      long     long     currProd     =     1L  L  *  arr  [  left  ]  *  arr  [  right  ];      // If the product matches the target return true.      if     (  currProd     ==     target  )     return     true  ;      // Move the pointers based on comparison with target.      if     (  currProd     >     target  )     right  --  ;      else     left  ++  ;      }      return     false  ;   }   int     main  ()     {      vector   <  int  >     arr     =     {  1       5       7       -1       5  };      long     long     target     =     35  ;      cout      < <     isProduct  (  arr       target  )      < <     endl  ;      return     0  ;   }   
C
   #include         #include         #include         // Function to compare two integers (used in qsort)   int     compare  (  const     void     *  a       const     void     *  b  )   {      return     (  *  (  int     *  )  a     -     *  (  int     *  )  b  );   }   // Function to check if any pair exists whose product   // equals the target.   bool     isProduct  (  int     arr  []     int     n       long     long     target  )   {      // Sort the array      qsort  (  arr       n       sizeof  (  int  )     compare  );      int     left     =     0       right     =     n     -     1  ;      while     (  left      <     right  )      {      // Calculate the current product      long     long     currProd     =     (  long     long  )  arr  [  left  ]     *     arr  [  right  ];      // If the product matches the target return true.      if     (  currProd     ==     target  )      return     true  ;      // Move the pointers based on comparison with target.      if     (  currProd     >     target  )      right  --  ;      else      left  ++  ;      }      return     false  ;   }   int     main  ()   {      int     arr  []     =     {  1       5       7       -1       5  };      long     long     target     =     35  ;      int     n     =     sizeof  (  arr  )     /     sizeof  (  arr  [  0  ]);      printf  (  '%d  n  '       isProduct  (  arr       n       target  ));      return     0  ;   }   
Java
   import     java.util.Arrays  ;   class   GfG     {      // Function to check if any pair exists whose product equals the target.      static     boolean     isProduct  (  int  []     arr       long     target  )     {      // Sort the array      Arrays  .  sort  (  arr  );      int     left     =     0       right     =     arr  .  length     -     1  ;      while     (  left      <     right  )     {          // Calculate the current product      long     currProd     =     (  long  )     arr  [  left  ]     *     arr  [  right  ]  ;      // If the product matches the target return true.      if     (  currProd     ==     target  )     return     true  ;      // Move the pointers based on comparison with target.      if     (  currProd     >     target  )     right  --  ;      else     left  ++  ;      }      return     false  ;      }      public     static     void     main  (  String  []     args  )     {      int  []     arr     =     {  1       5       7       -  1       5  };      long     target     =     35  ;         System  .  out  .  println  (  isProduct  (  arr       target  ));      }   }   
Python
   # Function to check if any pair exists whose product equals the target.   def   isProduct  (  arr     target  ):   # Sort the array   arr  .  sort  ()   left     right   =   0     len  (  arr  )   -   1   while   left    <   right  :   # Calculate the current product   currProd   =   arr  [  left  ]   *   arr  [  right  ]   # If the product matches the target return True.   if   currProd   ==   target  :   return   True   # Move the pointers based on comparison with target.   if   currProd   >   target  :   right   -=   1   else  :   left   +=   1   return   False   if   __name__   ==   '__main__'  :   arr   =   [  1     5     7     -  1     5  ]   target   =   35   print  (  isProduct  (  arr     target  ))   
C#
   using     System  ;   using     System.Linq  ;   class     GfG     {      // Function to check if any pair exists whose product      // equals the target.      static     bool     isProduct  (  int  []     arr       long     target  )     {          // Sort the array      Array  .  Sort  (  arr  );      int     left     =     0       right     =     arr  .  Length     -     1  ;      while     (  left      <     right  )     {      // Calculate the current product      long     currProd     =     (  long  )     arr  [  left  ]     *     arr  [  right  ];      // If the product matches the target return true.      if     (  currProd     ==     target  )     return     true  ;      // Move the pointers based on comparison with target.      if     (  currProd     >     target  )     right  --  ;      else     left  ++  ;      }      return     false  ;      }      static     void     Main  (  string  []     args  )     {      int  []     arr     =     {     1       5       7       -  1       5     };      long     target     =     35  ;         Console  .  WriteLine  (  isProduct  (  arr       target  ));      }   }   
JavaScript
   // Function to check if any pair exists whose product   // equals the target.   function     isProduct  (  arr       target  )     {      // Sort the array      arr  .  sort  ((  a       b  )     =>     a     -     b  );      let     left     =     0       right     =     arr  .  length     -     1  ;      while     (  left      <     right  )     {      // Calculate the current product      let     currProd     =     arr  [  left  ]     *     arr  [  right  ];      // If the product matches the target return true.      if     (  currProd     ===     target  )     return     true  ;      // Move the pointers based on comparison with target.      if     (  currProd     >     target  )     right  --  ;      else     left  ++  ;      }      return     false  ;   }   let     arr     =     [  1       5       7       -  1       5  ];   let     target     =     35  ;   console  .  log  (  isProduct  (  arr       target  ));   

Tulos
1  

Ajan monimutkaisuus: O (n log (n)) taulukon lajittelemiseksi
Aputila: O (1)

[Odotettu lähestymistapa] Hashset - O (n) -ajan ja O (n) -tilan käyttäminen

Voimme käyttää a hash -sarja etsivät tehokkaasti. Kun iterisimme taulukon läpi, tarkistamme, onko kukin numero kohteen tekijä. Jos se on, niin näemme, onko sen vastaava tekijä jo sarjassa. Jos niin, palaamme totta ; Muutoin lisäämme nykyisen numeron sarjaan ja jatkamme.

C++
   #include          #include         #include         using     namespace     std  ;   // Function to check if any pair exists whose product   // equals the target.   bool     isProduct  (  vector   <  int  >     &  arr       long     long     target  )     {          // Use an unordered set to store previously seen numbers.      unordered_set   <  int  >     st  ;      for     (  int     num     :     arr  )     {      // If target is 0 and current number is 0 return true.      if     (  target     ==     0     &&     num     ==     0  )     return     true  ;      // Check if current number can be a factor of the target.      if     (  target     %     num     ==     0  )     {      int     secondNum     =     target     /     num  ;          // If the secondNum has been seen before return true.      if     (  st  .  find  (  secondNum  )     !=     st  .  end  ())     {      return     true  ;      }          // Mark the current number as seen.      st  .  insert  (  num  );      }      }      return     false  ;   }   int     main  ()     {      vector   <  int  >     arr     =     {  1       5       7       -1       5  };      long     long     target     =     35  ;      cout      < <     isProduct  (  arr       target  )      < <     endl  ;      return     0  ;   }   
Java
   import     java.util.HashSet  ;   class   GfG     {      // Function to check if any pair exists whose product      // equals the target.      static     boolean     isProduct  (  int  []     arr       long     target  )      {      // Use a hash set to store previously seen numbers.      HashSet   <  Integer  >     set     =     new     HashSet   <>  ();      for     (  int     num     :     arr  )     {      // If target is 0 and current number is 0      // return true.      if     (  target     ==     0     &&     num     ==     0  )      return     true  ;      // Check if current number can be a factor of      // the target.      if     (  target     %     num     ==     0  )     {      int     secondNum     =     (  int  )(  target     /     num  );      // If the secondNum has been seen before      // return true.      if     (  set  .  contains  (  secondNum  ))      return     true  ;      // Mark the current number as seen.      set  .  add  (  num  );      }      }      return     false  ;      }      public     static     void     main  (  String  []     args  )      {      int  []     arr     =     {     1       5       7       -  1       5     };      long     target     =     35  ;      System  .  out  .  println  (  isProduct  (  arr       target  ));      }   }   
Python
   # Function to check if any pair exists whose product equals the target.   def   isProduct  (  arr     target  ):   # Use a set to store previously seen numbers.   st   =   set  ()   for   num   in   arr  :   # If target is 0 and current number is 0 return True.   if   target   ==   0   and   num   ==   0  :   return   True   # Check if current number can be a factor of the target.   if   target   %   num   ==   0  :   secondNum   =   target   //   num   # If the secondNum has been seen before return True.   if   secondNum   in   st  :   return   True   # Mark the current number as seen.   st  .  add  (  num  )   return   False   if   __name__   ==   '__main__'  :   arr   =   [  1     5     7     -  1     5  ]   target   =   35   print  (  isProduct  (  arr     target  ))   
C#
   using     System  ;   using     System.Collections.Generic  ;   class     GfG     {      // Function to check if any pair exists whose product      // equals the target.      static     bool     isProduct  (  int  []     arr       long     target  )      {      // Use a hash set to store previously seen numbers.      HashSet   <  int  >     set     =     new     HashSet   <  int  >  ();      foreach  (  int     num     in     arr  )      {      // If target is 0 and current number is 0      // return true.      if     (  target     ==     0     &&     num     ==     0  )      return     true  ;      // Check if current number can be a factor of      // the target.      if     (  target     %     num     ==     0  )     {      int     secondNum     =     (  int  )(  target     /     num  );      // If the secondNum has been seen before      // return true.      if     (  set  .  Contains  (  secondNum  ))      return     true  ;      // Mark the current number as seen.      set  .  Add  (  num  );      }      }      return     false  ;      }      static     void     Main  (  string  []     args  )      {      int  []     arr     =     {     1       5       7       -  1       5     };      long     target     =     35  ;      Console  .  WriteLine  (  isProduct  (  arr       target  ));      }   }   
JavaScript
   // Function to check if any pair exists whose product equals   // the target.   function     isProduct  (  arr       target  )   {      // Use a set to store previously seen numbers.      let     seen     =     new     Set  ();      for     (  let     num     of     arr  )     {      // If target is 0 and current number is 0 return      // true.      if     (  target     ===     0     &&     num     ===     0  )      return     true  ;      // Check if current number can be a factor of the      // target.      if     (  target     %     num     ===     0  )     {      let     secondNum     =     target     /     num  ;      // If the secondNum has been seen before return      // true.      if     (  seen  .  has  (  secondNum  ))      return     true  ;      // Mark the current number as seen.      seen  .  add  (  num  );      }      }      return     false  ;   }   let     arr     =     [     1       5       7       -  1       5     ];   let     target     =     35  ;   console  .  log  (  isProduct  (  arr       target  ));   

Tulos
1  

Ajan monimutkaisuus: O (n) yksi iteraatio
Aputila: O (n) elementtien tallentamiseksi hash -sarjassa


Top Artikkelit

Luokka

Mielenkiintoisia Artikkeleita