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

C++ में उद्धरण सूची से H-इंडेक्स खोजें - शोधकर्ता प्रभाव माप


समस्या विवरण

मान लीजिए हमारे पास एक शोधकर्ता के उद्धरणों की सरणी है। हमें शोधकर्ता के h-इंडेक्स की गणना करने के लिए एक फ़ंक्शन परिभाषित करना है। जैसा कि हम जानते हैं, h-इंडेक्स एक शोधकर्ता के पत्रों के प्रभाव की गणना के लिए उपयोग किया जाने वाला एक मीट्रिक है। औपचारिक रूप से H-इंडेक्स को इस प्रकार परिभाषित किया जा सकता है: "एक शोधकर्ता का सूचकांक h है यदि उनके N पत्रों में से h के कम से कम h उद्धरण प्रत्येक हैं, और अन्य N - h पत्रों में से प्रत्येक में h से अधिक उद्धरण नहीं हैं।"

उदाहरण के लिए, यदि इनपुट citations = [5, 4, 1, 2, 6] है, तो आउटपुट 3 होगा, क्योंकि कम से कम 3 पत्रों में कम से कम 3 उद्धरण प्रत्येक हैं - 4, 5, 6।

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

बकेट सॉर्ट (काउंटिंग सॉर्ट) का उपयोग करके O(n) समय में:

  1. n := सरणी का आकार, आकार n+1 की एक सरणी bucket बनाएं
  2. i को 0 से n-1 तक लूप करें:
    • x := c[i]
    • यदि x >= n, तो bucket[n] बढ़ाएं, अन्यथा bucket[x] बढ़ाएं
  3. cnt := 0
  4. i को n से 0 तक घटाते हुए:
    • cnt में bucket[i] जोड़ें
    • यदि cnt >= i, तो i लौटाएं
  5. -1 लौटाएं

C++ कार्यान्वयन

#include <bits/stdc++.h> 
using namespace std; 

class Solution { 
public: 
    int solve(vector<int>& c) { 
        int n = c.size(); 
        vector <int> bucket(n + 1); 
        for(int i = 0; i < n; i++){ 
            int x = c[i]; 
            if(x >= n){ 
                bucket[n]++; 
            } else { 
                bucket[x]++; 
            } 
        } 
        int cnt = 0; 
        for(int i = n; i >= 0; i--){ 
            cnt += bucket[i]; 
            if(cnt >= i) return i; 
        } 
        return -1; 
    } 
}; 

int main(){ 
    Solution ob; 
    vector<int> v = {5, 4, 1, 2, 6}; 
    cout << (ob.solve(v)); 
    return 0;
}

इनपुट

[5, 4, 1, 2, 6]

आउटपुट

3
  1. C++ में डौबली लिंक्ड लिस्ट का आकार ढूंढना C++ में डौबली लिंक्ड लिस्ट का आकार ढूंढना

    इस समस्या में, हमें एक डौबली लिंक्ड लिस्ट दी गई है। हमारा कार्य C++ में डौबली लिंक्ड लिस्ट का आकार ढूंढने के लिए एक प्रोग्राम बनाना है। डौबली लिंक्ड लिस्ट एक विशेष प्रकार की लिंक्ड लिस्ट है जिसमें नेविगेशन दोनों तरीकों से संभव है, आगे और पीछे आसानी से सिंगल लिंक्ड लिस्ट की तुलना में। डौबली लिंक्ड ल

  1. - C++ प्रोग्राम: ऑर्डर-स्टैटिस्टिक एल्गोरिदम द्वारा ith लार्जेस्ट नंबर खोजना

    यह C++ प्रोग्राम ऑर्डर-स्टैटिस्टिक ट्री (Order-Statistic Tree) का उपयोग करके दी गई लिस्ट से kth लार्जेस्ट (kवां सबसे बड़ा) एलिमेंट खोजता है। प्रत्येक नोड को उसकी रैंक (इनऑर्डर ट्रैवर्सल में पोजीशन) असाइन की जाती है। एल्गोरिदम k है, तो लेफ्ट चाइल्ड में सर्च करें - अन्यथा राइट चाइल्ड में सर्च

  1. C++ प्रोग्राम: एडजेसेंसी लिस्ट इम्प्लीमेंट करना C++ प्रोग्राम: एडजेसेंसी लिस्ट इम्प्लीमेंट करना

    एक ग्राफ का एडजेसेंसी लिस्ट प्रतिनिधित्व एक लिंक्ड लिस्ट प्रतिनिधित्व है। इस प्रतिनिधित्व में हमारे पास लिस्ट्स का एक ऐरे होता है। ऐरे का आकार V होता है। यहां V वर्टेक्स की संख्या है। दूसरे शब्दों में, हम कह सकते हैं कि हमारे पास V संख्या की अलग-अलग लिस्ट्स को स्टोर करने के लिए एक ऐरे है। यदि एक लि