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

C++ में दिए गए N रेंज से उत्पन्न श्रृंखला में k-वां तत्व ज्ञात करें


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

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

इनपुट : ranges[][] = {{1, 3}, {5, 7}}, k = 4 आउटपुट : 5

व्याख्या −

श्रृंखला है {1, 2, 3, 5, 6, 7} 4वां तत्व 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<<"-वां तत्व रेंज से उत्पन्न श्रृंखला का है "<<    findKthSmallestEleSeries(n, k, range); return 0; }

आउटपुट

4-वां तत्व रेंज से उत्पन्न श्रृंखला का है 5 

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

एक अन्य दृष्टिकोण

समस्या को हल करने का एक अन्य दृष्टिकोण बाइनरी सर्च और काउंटर सरणी का उपयोग करना है। काउंटर सरणी दिए गए रेंज तक पूर्णांकों की गिनती संग्रहीत करेगी, count[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<<"-वां तत्व रेंज से उत्पन्न श्रृंखला का है "<< findKthSmallestEleSeries(n, k, range); return 0; }

आउटपुट

4-वां तत्व रेंज से उत्पन्न श्रृंखला का है 5 

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

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

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

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

  1. C++ में ट्री में दिए गए उपट्री के DFS ट्रैवर्सल में K-वां नोड ज्ञात करें C++ में ट्री में दिए गए उपट्री के DFS ट्रैवर्सल में K-वां नोड ज्ञात करें

    इस समस्या में, हमें आकार N का एक ट्री, ट्री का एक नोड V और k दिया गया है। हमारा कार्य ट्री में दिए गए उपट्री के DFS ट्रैवर्सल में K-वां नोड ज्ञात करना है। हमें शीर्ष V से शुरू होने वाले ट्री के DFS ट्रैवर्सल में k-वां नोड ढूंढना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट : V = 2, k = 3 आउ