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

C++ का उपयोग करके क्रमबद्ध सरणी में K से बड़े तत्वों की संख्या ज्ञात करना

समस्या विवरण

इस समस्या में, हमें N क्रमबद्ध पूर्णांक मानों वाली एक सरणी arr[] और एक पूर्णांक k दिया गया है। हमारा कार्य क्रमबद्ध सरणी में K से बड़े तत्वों की संख्या ज्ञात करना है।

उदाहरण

इनपुट

arr[] = {1, 2, 5, 7, 8, 9}
k = 4

आउटपुट

4

व्याख्या

K = 4 से बड़े तत्व हैं: 5, 7, 8, 9

हल का दृष्टिकोण

विधि 1: रैखिक खोज (O(N))

सरणी पर 0 से N तक लूप का उपयोग करके एक सरल समाधान। और फिर पहले तत्व पर रुकें जो k से बड़ा है। फिर शेष मानों की संख्या गिनें।

#include <iostream> 
using namespace std; 

int findGreaterCount(int arr[], int n, int k) {
    for(int i = 0; i < n; i++) {
        if(arr[i] > k)
            return (n - i);
    }
    return 0; // कोई तत्व बड़ा नहीं मिला
}

int main() {
    int arr[] = {1, 3, 5, 7, 7, 8, 12, 21};
    int n = sizeof(arr) / sizeof(arr[0]);
    int k = 5;
    cout << "K से बड़े तत्वों की संख्या है " << findGreaterCount(arr, n, k);
    return 0;
}

विधि 2: बाइनरी खोज (O(log N)) - अधिक कुशल

K से बड़े तत्वों को खोजने के लिए बाइनरी खोज का उपयोग करना। और फिर बड़े तत्वों की संख्या वापस करना।

#include <iostream> 
using namespace std; 

int findGreaterCount(int arr[], int n, int k) {
    int start = 0;
    int end = n - 1;
    int firstGreaterIdx = n; // डिफ़ॉल्ट: कोई तत्व बड़ा नहीं
    
    while (start <= end) {
        int mid = start + (end - start) / 2;
        if (arr[mid] > k) {
            firstGreaterIdx = mid;
            end = mid - 1; // बाईं ओर खोजें
        } else {
            start = mid + 1; // दाईं ओर खोजें
        }
    }
    
    return (n - firstGreaterIdx);
}

int main() {
    int arr[] = {1, 3, 5, 7, 7, 8, 12, 21};
    int n = sizeof(arr) / sizeof(arr[0]);
    int k = 5;
    cout << "K से बड़े तत्वों की संख्या है " << findGreaterCount(arr, n, k);
    return 0;
}

आउटपुट

K से बड़े तत्वों की संख्या है 5

जटिलता विश्लेषण

विधिसमय जटिलतास्पेस जटिलता
रैखिक खोजO(N)O(1)
बाइनरी खोजO(log N)O(1)

मुख्य बिंदु

  • सरणी क्रमबद्ध होनी चाहिए बाइनरी खोज के लिए
  • बाइनरी खोज पहले तत्व का इंडेक्स खोजती है जो k से बड़ा है
  • उत्तर = न - firstGreaterIndex
  • यदि सभी तत्व ≤ k हैं, तो उत्तर 0 है
  1. - C++ में सरणी के सभी तत्वों को हटाने के लिए आवश्यक न्यूनतम ऑपरेशन

    समस्या कथन एक पूर्णांक सरणी arr दी गई है, सरणी के सभी तत्वों को हटाने के लिए आवश्यक न्यूनतम ऑपरेशन की संख्या प्रिंट करें। तत्व हटाते समय निम्न प्रतिबंध है: सरणी से किसी भी तत्व को यादृच्छिक रूप से चुना जा सकता है और उससे विभाज्य हर तत्व को सरणी से हटाया जा सकता है यदि arr[] = {2, 4, 15, 10, 8,

  1. - C++ में सरणी में एक संख्या की फ्रीक्वेंसी ज्ञात करना

    मान लीजिए हमारे पास एक सरणी है। इसमें n अलग-अलग तत्व हैं। हमें सरणी में एक तत्व की फ्रीक्वेंसी जांचनी है। मान लीजिए A = [5, 12, 26, 5, 3, 4, 15, 5, 8, 4], यदि हम 5 की फ्रीक्वेंसी ढूंढने की कोशिश करते हैं, तो यह 3 होगी। इसे हल करने के लिए, हम सरणी को बाएं से स्कैन करेंगे, यदि तत्व दी गई संख्या के सम

  1. - C++ में रोटेटेड सॉर्टेड सरणी में रोटेशन काउंट ढूंढना

    मान लीजिए हमारे पास एक सरणी है, जो रोटेटेड सॉर्टेड सरणी है। हमें उन रोटेशन की संख्या ढूंढनी है जो सरणी को सॉर्ट करने के लिए आवश्यक हैं। (हम रोटेशन दाएं से बाएं मानेंगे।)मान लीजिए सरणी ऐसी है: {15, 17, 1, 2, 6, 11}, तो हमें सरणी को दो बार रोटेट करना होगा ताकि यह सॉर्ट हो जाए। अंतिम क्रम {1, 2, 6, 11,