
Étant donné un tableau arr [] de n entiers distincts et un cible Valeur La tâche consiste à vérifier s'il y a une paire d'éléments dans le tableau dont le produit est égal à la cible.
Gimp enregistrant au format JPEG
Exemples:
Saisir: arr [] = [1 5 7 -1 5] cible = 35
Sortir: vrai
Explication: Comme 5 * 7 = 35, la réponse est vraie.Saisir: arr [] = [-10 20 9 -40] cible = 30
Sortir: FAUX
Explication: Aucune paire n'existe avec le produit 30
Tableau de contenu
- [Approche naïve] En générant toutes les paires possibles - O (n ^ 2) Temps et O (1) Espace
- [Meilleure approche] en utilisant deux techniques de pointeur - O (n log (n)) temps et o (1) espace
- [Approche attendue] Utilisation de Hashset - O (n) Temps et O (n) Espace
[Approche naïve] en générant toutes les paires possibles - o (n 2 ) temps et o (1) espace
C++L'approche très basique consiste à générer toutes les paires possibles et à vérifier si une paire existe dont le produit est égal à la valeur cible donnée puis retourne vrai . Si aucune paire de ce type n'existe, retournez FAUX .
tutoriel pyspark
#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 (1LL * 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 (1LL * 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('%dn' 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));
Sortir
1
Complexité du temps: O (n²) pour utiliser deux boucles imbriquées
Espace auxiliaire: O (1)
[Meilleure approche] en utilisant deux techniques de pointeur - O (n log (n)) temps et o (1) espace
C++Nous pouvons également utiliser la technique à deux points pour ce problème, mais il est applicable uniquement à des données triées. Alors triez d'abord le tableau et gardez deux pointeurs un pointeur au début ( gauche ) Et un autre à la fin ( droite ) du tableau. Vérifiez ensuite le produit des éléments de ces deux pointeurs:
- Si le produit est égal au cible Nous avons trouvé la paire.
- Si le produit est inférieur au cible déplacer le gauche pointeur vers le droite pour augmenter le produit.
- Si le produit est supérieur au cible déplacer le droite pointeur vers le gauche pour diminuer le produit.
#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 = 1LL*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('%dn' 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));
Sortir
1
Complexité du temps: O (n log (n)) pour trier le tableau
Espace auxiliaire: O (1)
remplissage CSS
[Approche attendue] Utilisation de Hashset - O (n) Temps et O (n) Espace
C++Nous pouvons utiliser un set de hachage pour efficience les yeux. Au fur et à mesure que nous itons dans le tableau, nous vérifions si chaque numéro est un facteur de la cible. Si c'est le cas, nous voyons si son facteur correspondant est déjà dans l'ensemble. Si c'est le cas, nous revenons vrai ; Sinon, nous ajoutons le numéro actuel à l'ensemble et continuons.
#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));
Sortir
1
Complexité du temps: O (n) pour une seule itération
Espace auxiliaire: O (n) pour stocker des éléments dans l'ensemble de hachage