Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

दो क्रमबद्ध सरणियों से जोड़े की गणना करें जिनका योग C++ में दिए गए मान x के बराबर है

हमें दो सरणियाँ दी गई हैं जिनमें धनात्मक संख्याएँ और एक मान x है। लक्ष्य सरणी के तत्वों के जोड़े को ढूंढना है जैसे कि प्रकार (ए, बी) के जोड़े में ए + बी =एक्स है और ए पहली सरणी से संबंधित है और बी दूसरी सरणी से संबंधित है।

आइए उदाहरणों के साथ समझते हैं

इनपुट - arr_1[] ={1,2,5,3,4}; arr_2[] ={7,0,1,3}; x=6

आउटपुट −दो क्रमबद्ध सरणियों से युग्मों की संख्या जिनका योग किसी दिए गए मान x के बराबर है − 2

. है

स्पष्टीकरण - जोड़े हैं (5,1) - (arr_1[2],arr_2[2]) और (3,3) - (arr_1[3],arr_2[3])

इनपुट - arr_1[] ={1,1,1}; arr_2[] ={2,2}; x=6

आउटपुट - दो क्रमबद्ध सरणियों से जोड़े की संख्या जिनका योग किसी दिए गए मान x के बराबर है - 2

हैं

स्पष्टीकरण - जोड़े हैं (1,2) - (arr_1[0],arr_2[0]) और (1,2) - (arr_1[1],arr_2[1])

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

हम दो दृष्टिकोणों का उपयोग करेंगे। लूप के लिए उपयोग करके पहला अनुभवहीन दृष्टिकोण। लूप के लिए दोनों का उपयोग करके ट्रैवर्सिंग शुरू करें जैसे कि इंडेक्स i arr_1 [] के लिए है और इंडेक्स j arr_2 [] के लिए है। जोड़ी के लिए (arr_1[i]+arr_2[j]==x), वेतन वृद्धि की संख्या। परिणाम के रूप में वापसी की गिनती।

  • सकारात्मक तत्वों और लंबाई जैसे size_arr_1 और size_arr_2 के साथ एक पूर्णांक सरणी arr_1[] और arr_2[] लें।

  • फ़ंक्शन Pair_value_x(int ​​arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int x) दोनों सरणियों और उनकी लंबाई लेता है और जोड़े को इस तरह लौटाता है कि तत्वों का योग x है।

  • गिनती का प्रारंभिक मान 0 के रूप में लें।

  • arr_1[] को i=0 से i तक ट्रैवर्स करना प्रारंभ करें

  • प्रत्येक जोड़ी के लिए arr_1[i], arr_2[j], जांचें कि क्या योग x है। अगर सही है, तो इंक्रीमेंट काउंट.

  • परिणाम के रूप में वापसी की गिनती।

कुशल दृष्टिकोण

इस दृष्टिकोण में हम arr_1 के तत्वों का एक unordered_set बनाएंगे। अब लूप के लिए और प्रत्येक मान arr_2[i] का उपयोग करके arr_2 को पार करें, यदि x-arr_2[i] सेट में पाया जाता है तो वृद्धि गणना। अंत में वापसी की गिनती।

  • समान सरणियाँ और उनके आकार लें।

  • फ़ंक्शन Pair_value_x(int ​​arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int x) दोनों सरणियों और उनकी लंबाई लेता है और जोड़े को इस तरह लौटाता है कि तत्वों का योग x है।

  • प्रारंभिक गणना 0 के रूप में लें।

  • arr_1 के अद्वितीय तत्वों को संग्रहीत करने के लिए unordered_set hash_map बनाएं।

  • लूप के लिए उपयोग करके arr_1 के तत्वों के साथ हैश_मैप को पॉप्युलेट करें।

  • अब लूप के लिए उपयोग करके arr_2[] को पार करें।

  • प्रत्येक arr-2[j] के लिए, यदि x-arr_2[j] हैश_मैप में (hash_map.find(x - arr_2[j]) !=hash_map.end ()) का उपयोग करके पाया जाता है, तो वृद्धि गणना।

  • अंत में योग के साथ जोड़े की गणना x के बराबर होती है।

  • परिणाम के रूप में वापसी की गिनती।

उदाहरण (बेवकूफ दृष्टिकोण)

#include <bits/stdc++.h>
using namespace std;
int Pair_value_x(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int x){
   int count = 0;
   for (int i = 0; i < size_arr_1; i++){
      for (int j = 0; j < size_arr_2; j++){
         if ((arr_1[i] + arr_2[j]) == x){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr_1[] = {1, 2, 3, 4};
   int arr_2[] = {2, 3, 4, 5};
   int size_arr_1 = sizeof(arr_1) / sizeof(arr_1[0]);
   int size_arr_2 = sizeof(arr_2) / sizeof(arr_2[0]);
   int x = 6;
   cout<<"Count of pairs from two sorted arrays whose sum is equal to a given value x are: "<<
Pair_value_x(arr_1, arr_2, size_arr_1 , size_arr_2, x);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of pairs from two sorted arrays whose sum is equal to a given value x are: 4

उदाहरण (कुशल दृष्टिकोण)

#include <bits/stdc++.h>
using namespace std;
int Pair_value_x(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int x){
   int count = 0;
   unordered_set<int> hash_map;
   for (int i = 0; i < size_arr_1; i++){
      hash_map.insert(arr_1[i]);
   }
   for (int j = 0; j < size_arr_2; j++){
      if (hash_map.find(x - arr_2[j]) != hash_map.end()){
         count++;
      }
   }
   return count;
}
int main(){
   int arr_1[] = {1, 2, 3, 4};
   int arr_2[] = {2, 3, 4, 5};
   int size_arr_1 = sizeof(arr_1) / sizeof(arr_1[0]);
   int size_arr_2 = sizeof(arr_2) / sizeof(arr_2[0]);
   int x = 6;
   cout<<"Count of pairs from two sorted arrays whose sum is equal to a given value x are: "<< Pair_value_x(arr_1, arr_2, size_arr_1 , size_arr_2, x);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of pairs from two sorted arrays whose sum is equal to a given value x are: 4

  1. एक क्रमबद्ध दोगुनी लिंक की गई सूची में ट्रिपल की गणना करें जिसका योग C++ में दिए गए मान x के बराबर है

    उदाहरण के लिए इनपुट linked list: [ 3−4−13−5−10−10−0 ] x=20 आउटपुट Count of triplets in a sorted doubly linked list whose product is equal to a given value x are: 2 स्पष्टीकरण Triplets will be: ( 3,4,13 ) and ( 10,10,0 ) इनपुट linked list: [ 4−3−1&minu

  1. एक क्रमबद्ध डबल लिंक्ड सूची में ट्रिपल गिनें जिसका उत्पाद सी ++ में दिए गए मान x के बराबर है

    पूर्णांक मानों वाली एक क्रमबद्ध डबल लिंक्ड सूची को देखते हुए। लक्ष्य उन त्रिगुणों को खोजना है जिनका गुणनफल दिए गए मान x के बराबर है। यदि इनपुट लिंक्ड सूची 3−4−1−2 है और x 6 है तो गिनती 1 (ट्रिपलेट (3,1,2)) होगी उदाहरण के लिए इनपुट linked list: [ 200−4−16−5−10−10&min

  1. दो बीएसटी से जोड़े की गणना करें जिनकी राशि सी ++ में दिए गए मान x के बराबर है

    हमें इनपुट के रूप में दो बाइनरी सर्च ट्री और एक वेरिएबल x दिया गया है। लक्ष्य प्रत्येक पेड़ से नोड्स के जोड़े को ढूंढना है ताकि नोड्स के मूल्य का योग x के बराबर हो। BST_1 से नोड 1 और BST_2 से नोड 2 लें और दोनों का डेटा भाग जोड़ें। यदि योग =x. वेतन वृद्धि की संख्या। आइए उदाहरणों से समझते हैं। इनपुट