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

C++ में k सूचियों से तत्वों वाली सबसे छोटी श्रेणी खोजें

मान लीजिए कि हमारे पास k अलग-अलग सूचियाँ हैं। तत्वों को क्रमबद्ध किया जाता है। हमें सबसे छोटी श्रेणी खोजनी है जिसमें प्रत्येक k विभिन्न सूचियों में से कम से कम एक संख्या शामिल हो। यहाँ रेंज [a,b] रेंज [c,d] से छोटी है जब b-a

तो अगर इनपुट [[4,10,15,25,26], [0,9,14,20], [5,18,24,30]] जैसा है, तो आउटपुट [14, 18] होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • minRange:=inf, maxRange:=-inf, rangeSize:=inf, tempMinRange:=inf, tempMaxRange:=-inf

  • n :=अंकों का आकार

  • आकार n के सरणी पॉइंटर्स को परिभाषित करें

  • प्राथमिकता कतार बनाएं pq

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • pq में { nums[i, 0], i } डालें

    • tempMaxRange :=अधिकतम tempMaxRange और nums[i, 0]

  • जबकि 1 शून्य नहीं है, करें -

    • एक जोड़ी अस्थायी परिभाषित करें:=pq के ऊपर

    • pq से तत्व हटाएं

    • tempMinRange :=temp.first

    • idx:=अस्थायी का दूसरा तत्व

    • अगर tempMaxRange - tempMinRange

      • रेंज साइज:=टेम्पमैक्स रेंज - टेम्पमिन रेंज

      • मिनरेंज:=टेम्पमिनरेंज

      • मैक्स रेंज:=टेम्पमैक्स रेंज

    • (पॉइंटर्स [idx] को 1 से बढ़ाएं)

    • अगर पॉइंटर्स [idx] अंकों के आकार [idx] के समान है, तो -

      • लूप से बाहर आएं

    • अन्यथा

      • tempMaxRange :=अधिकतम tempMaxRange और nums[idx, पॉइंटर्स[idx]]

      • pq में {nums[idx, पॉइंटर्स[idx]], idx} डालें

  • आकार 2 के एक सरणी उत्तर को परिभाषित करें

  • ans[0] :=minRange, ans[1] :=maxRange

  • वापसी उत्तर

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
struct Comparator{
   bool operator() (pair <int, int> a, pair <int, int> b){
      return !(a.first < b.first);
   }
};
class Solution {
public:
   vector<int> smallestRange(vector<vector<int>>& nums) {
      int minRange = INT_MAX;
      int maxRange = INT_MIN;
      int rangeSize = INT_MAX;
      int tempMinRange, tempMaxRange, tempRangeSize;
      tempMinRange = INT_MAX;
      tempMaxRange = INT_MIN;
      int n = nums.size();
      vector <int> pointers(n);
      priority_queue < pair <int, int>, vector < pair <int, int> >, Comparator > pq;
      for(int i = 0; i < n; i++){
         pq.push({nums[i][0], i});
         tempMaxRange = max(tempMaxRange, nums[i][0]);
      }
      while(1){
         pair <int, int> temp = pq.top();
         pq.pop();
         tempMinRange = temp.first;
         int idx = temp.second;
         if(tempMaxRange - tempMinRange < rangeSize){
            rangeSize = tempMaxRange - tempMinRange;
            minRange = tempMinRange;
            maxRange = tempMaxRange;
         }
         pointers[idx]++;
         if(pointers[idx] == nums[idx].size())break;
         else{
            tempMaxRange = max(tempMaxRange,
            nums[idx][pointers[idx]]);
            pq.push({nums[idx][pointers[idx]], idx});
         }
      }
      vector <int> ans(2);
      ans[0] = minRange;
      ans[1] = maxRange;
      return ans;
   }
};
main(){
   Solution ob;
   vector<vector<int>> v =
   {{4,10,15,25,26},{0,9,14,20},{5,18,24,30}};
   print_vector(ob.smallestRange(v));
}

इनपुट

{{4,10,15,25,26},{0,9,14,20},{5,18,24,30}};

आउटपुट

[14, 18, ]

  1. एक श्रेणी खोजें जो C++ में दिए गए N श्रेणी के सभी तत्वों को शामिल करती है

    मान लीजिए कि हमारे पास n रेंज हैं जिनमें L और R हैं। हमें 0 के इंडेक्स को जांचना या खोजना है - उस रेंज के आधार पर जो अन्य सभी n - 1 रेंज को कवर करता है। यदि ऐसी कोई सीमा नहीं है, तो -1 प्रदर्शित करें। उदाहरण के लिए, यदि एल =[2, 4, 3, 1], और आर =[4, 6, 7, 9], तो आउटपुट 3 है। तो इसका मतलब है कि तीसरे

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

    विचार करें कि हमारे पास कुछ तत्वों के साथ एक सरणी ए है। हमारे पास दो अन्य मान X और k हैं। हमारा कार्य सरणी A से X के निकटतम तत्वों की k संख्या ज्ञात करना है। यदि तत्व X सरणी में मौजूद है, तो यह आउटपुट में नहीं दिखाया जाएगा। अगर ए =[12, 16, 22, 30, 35, 39, 42, 45, 48, 50, 53, 55, 56] और एक्स =35, के

  1. C++ में किसी सरणी में सबसे छोटे मान की आवृत्ति ज्ञात कीजिए

    यहां हम देखेंगे कि किसी सरणी में सबसे छोटे तत्व की आवृत्ति कैसे ज्ञात करें। मान लीजिए कि सरणी तत्व [5, 3, 6, 9, 3, 7, 5, 8, 3, 12, 3, 10] हैं, यहाँ सबसे छोटा तत्व 3 है, और इस तत्व की आवृत्ति 4 है। तो आउटपुट 4 है । इसे हल करने के लिए हमें सूची का सबसे छोटा तत्व मिलेगा, फिर हम पहली संख्याओं की घटनाओं