Tarkista pari annetulla tuotteella
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
- [Parempi lähestymistapa] Kahden osoitintekniikan käyttäminen - O (n log (n)) -aika ja O (1) -tilaa
- [Odotettu lähestymistapa] Hashset - O (n) -ajan ja O (n) -tilan käyttäminen
[Naiivi lähestymistapa] luomalla kaikki mahdolliset parit - O (n 2 ) aika ja o (1) tila
C++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 .
#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
C++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.
#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
C++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.
#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