समस्या विवरण
एक लिंक्ड लिस्ट और गुणनफल K दिया गया है। जांचें कि क्या लिस्ट में दो संख्याएं हैं जिनका गुणनफल K के बराबर है।
उदाहरण: लिस्ट = {2, 4, 8, 12, 15}, K = 16 → जोड़ी (2, 8)
हल: हैशिंग
- हैश टेबल में सभी तत्व डालें
- लिस्ट ट्रैवर्स करें, प्रत्येक तत्व के लिए जांचें कि K वर्तमान तत्व से विभाज्य है और K/वर्तमान हैश टेबल में मौजूद है
उदाहरण कोड
#include <iostream>
#include <unordered_set>
#define MAX 100000
using namespace std;
class Node {
public:
int data;
Node* next;
};
void append(Node** start, int key) {
Node* new_node = new Node;
new_node->data = key;
new_node->next = (*start);
(*start) = new_node;
}
bool isPairPresent(Node* start, int K) {
unordered_set s;
Node* p = start;
while (p != NULL) {
int current = p->data;
if ((K % current == 0) && (s.find(K / current) != s.end())) {
cout << current << " " << K / current;
return true;
}
s.insert(p->data);
p = p->next;
}
return false;
}
int main() {
Node* start = NULL;
int arr[] = {2, 4, 8, 12, 15};
int n = sizeof(arr)/sizeof(arr[0]);
for (int i = 0; i < n; i++)
append(&start, arr[i]);
if (!isPairPresent(start, 16))
cout << "NO PAIR EXIST";
return 0;
}
आउटपुट
2 8