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

C++ में दी गई N श्रेणियों द्वारा उत्पन्न श्रृंखला में kth तत्व ज्ञात कीजिए

इस समस्या में, हमें अंतराल L - R के बीच एक मैट्रिक्स श्रेणी [N] [2] और एक पूर्णांक मान k के रूप में पूर्णांक मानों की एक N श्रेणी दी गई है। हमारा काम है दिए गए N श्रेणियों द्वारा उत्पन्न श्रृंखला में kth तत्व ढूंढना

समस्या को समझने के लिए एक उदाहरण लेते हैं,

Input : ranges[][] = {{1, 3}, {5, 7}}, k = 4
Output : 5

स्पष्टीकरण -

The series is {1, 2, 3, 5, 6, 7}
The 4th element is 5.

समाधान दृष्टिकोण

समस्या का एक सरल समाधान दी गई श्रेणियों के लिए पूर्णांकों की एक श्रृंखला बनाकर है और फिर तत्वों को उनके सरणी के सूचकांक k पर खोजें।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <iostream>
using namespace std;
int findKthSmallestEleSeries(int n, int k, int range[][2]){
   int rangeVal[10000];
   int rangeSize = 0;
   for(int i = 0; i < n; i++){
      for(int j = range[i][0]; j <= range[i][1]; j++){
         rangeVal[rangeSize] = j;
         rangeSize++;
      }
   }
   return rangeVal[k-1];
}
int main(){
   int L[] = { 1, 5 };
   int R[] = { 3, 8 };
   int range[][2] = {{1, 3}, {5, 8}};
   int n = sizeof(L) / sizeof(int);
   int k = 4;
   cout<<k<<"-th element of the series generated by ranges is "<<
   findKthSmallestEleSeries(n, k, range); 
   return 0;
}

आउटपुट

4-th element of the series generated by ranges is 5

यह तरीका अच्छा है लेकिन अगर रेंज बहुत बड़ी हैं तो इससे मेमोरी की समस्या हो सकती है। इसलिए, हमें एक बेहतर दृष्टिकोण प्राप्त करने की आवश्यकता है जो सरणी के सभी तत्वों को संग्रहीत करता है।

एक और तरीका

समस्या को हल करने का एक अन्य तरीका द्विआधारी खोज और काउंटर सरणी का उपयोग करना है। काउंटर सरणी दी गई सीमा तक पूर्णांकों की संख्या को संग्रहीत करेगी, गिनती [i] =वर्ण की संख्या i-वें श्रेणी तक।

फिर k के लिए, हम श्रेणी संख्या i पाएंगे, जिसमें k-वां सबसे छोटा मान निहित है।

तब हम इस श्रेणी में मान पाएंगे।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <iostream>
using namespace std;
int findKthSmallestEleSeries(int n, int k, int range[][2]){
   int start = 1;
   int end = n;
   int count[n + 1];
   count[0] = 0;
   for (int i = 0; i < n; i++)
      count[i + 1] = count[i] + (range[i][1] - range[i][0]) + 1;
   int index = -1;
   int mid;
   while (start <= end) {
      mid = (start + end) / 2;
      if (count[mid] > k) {
         index = mid;
         end = mid - 1;
      }
      else if (count[mid] < k) 
         start = mid + 1;
      else {
         index = mid;
         break;
      }
   }
   start = range[index - 1][0];
   end = range[index - 1][1];
   int indexK = k - count[index - 1];
   while (start <= end) {
      mid = (start + end) / 2;
      if ((mid - range[index - 1][0]) + 1 == indexK) {
         return mid;
      }
      else if ((mid - range[index - 1][0]) + 1 > indexK)
         end = mid - 1;
      else
         start = mid + 1;
   }
   return -1;
}
int main(){
   int L[] = { 1, 5 };
   int R[] = { 3, 8 };
   int range[][2] = {{1, 3}, {5, 8}};
   int n = sizeof(L) / sizeof(int);
   int k = 4;
   cout<<k<<"-th element of the series generated by ranges is "<<
   findKthSmallestEleSeries(n, k, range);
   return 0;
}

आउटपुट

4-th element of the series generated by ranges is 5

  1. C++ में दिए गए समीकरण के हलों की संख्या ज्ञात कीजिए

    इस समस्या में, हमें तीन पूर्णांक मान A, B, C दिए गए हैं। हमारा कार्य दिए गए समीकरण के समाधानों की संख्या ज्ञात करना है। । समीकरण X = B*Sm(X)^A + C जहां एसएम(एक्स) एक्स के अंकों का योग है। हमें X के सभी मानों को गिनने की आवश्यकता है ताकि यह उपरोक्त समीकरण को संतुष्ट करे जहाँ X 1 से 10 के बीच कोई भी

  1. C++ में दिए गए तत्वों को हटाने के बाद सबसे बड़ा खोजें

    इस समस्या में, हमें आकार n का एक सरणी aar[] और आकार m का एक अन्य सरणी del[] दिया जाता है। हमारा काम दिए गए तत्वों को हटाने के बाद सबसे बड़ा खोजना है। यदि एक से अधिक इंस्टेंस वाले तत्व को हटाना आवश्यक है, तो तत्व के पहले उदाहरण को हटा दें। समस्या को समझने के लिए एक उदाहरण लेते हैं, Input : arr[] =

  1. C++ में ट्री में दिए गए सबट्री के DFS ट्रैवर्सल में Kth नोड खोजें

    इस समस्या में, हमें N आकार का एक पेड़, V और k के पेड़ का एक नोड दिया जाता है। हमारा काम है किसी ट्री में दिए गए सबट्री के DFS ट्रैवर्सल में Kth नोड ढूंढना । हमें शीर्ष V से शुरू होने वाले पेड़ के DFS ट्रैवर्सल में kth नोड खोजने की आवश्यकता है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट :