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

C++ में दो क्रमबद्ध सूचियों का माध्यिका ज्ञात करने का कार्यक्रम

मान लीजिए कि हमारे पास दो क्रमबद्ध सूचियाँ हैं। हमें इन दो सूचियों का माध्यिका ज्ञात करना है। तो अगर सरणियाँ [1,5,8] और [2,3,6,9] जैसी हैं, तो उत्तर 5 होगा।

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

  • एक फ़ंक्शन को हल करें परिभाषित करें (), यह एक सरणी संख्या 1, एक सरणी संख्या 2 लेगा,
  • यदि nums1 का आकार> nums2 का आकार, तो:
    • रिटर्न सॉल्व(nums2, nums1)
  • x :=nums1 का आकार, y :=nums2 का आकार
  • निम्न:=0, उच्च:=x
  • कुल लंबाई :=x + y
  • कम <=उच्च होने पर, करें:
    • विभाजनX :=निम्न + (उच्च-निम्न)
    • विभाजनY :=(कुल लंबाई + 1) / 2 - विभाजनX
    • maxLeftX :=(यदि पार्टीशनX 0 के समान है, तो -inf, अन्यथा nums1[partitionX - 1])
    • minRightX :=(यदि पार्टीशनX, x के समान है, तो inf, अन्यथा nums1[partitionX])
    • maxLeftY :=(यदि पार्टीशनवाई 0 के समान है, तो -इनफ, अन्यथा nums2[partitionY - 1])
    • minRightY :=(यदि पार्टीशन वाई, y के समान है, तो inf, अन्यथा nums2[partitionY])
    • यदि maxLeftX <=minRightY और maxLeftY <=minRightX, तो:
      • यदि टोटल लेंथ मोड 2 0 के समान है, तो:
        • वापसी ((अधिकतम maxLeftX और maxLeftY) + (न्यूनतम minRightX और minRightY))/2
      • अन्यथा
        • अधिकतम maxLeftX और maxLeftY लौटाएं
    • अन्यथा जब maxLeftX> minRightY, तब:
      • उच्च:=विभाजनX - 1
    • अन्यथा
  • वापसी 0

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

उदाहरण

#include
using namespace std;

class Solution {
   public:
   double solve(vector& nums1, vector& nums2) {
      if(nums1.size()>nums2.size())
         return solve(nums2,nums1);
      int x = nums1.size();
      int y = nums2.size();
      int low = 0;
      int high = x;
      int totalLength = x+y;
      while(low<=high){
         int partitionX = low + (high - low)/2;
         int partitionY = (totalLength + 1)/2 - partitionX;

         int maxLeftX = (partitionX ==0?INT_MIN:nums1[partitionX-1] );
         int minRightX = (partitionX == x?INT_MAX : nums1[partitionX]);

         int maxLeftY = (partitionY ==0?INT_MIN:nums2[partitionY-1] );
         int minRightY = (partitionY == y?INT_MAX : nums2[partitionY]);

         if(maxLeftX<=minRightY && maxLeftY <= minRightX){
            if(totalLength% 2 == 0){
               return ((double)max(maxLeftX,maxLeftY) + (double)min(minRightX,minRightY))/2;
            }
            else{
               return max(maxLeftX, maxLeftY);
            }
         }
         else if(maxLeftX>minRightY)
            high = partitionX-1;
         else low = partitionX+1;
      }
   return 0;
   }
};
main(){
   Solution ob;
   vector v1 = {1,5,8}, v2 = {2,3,6,9};
   cout << (ob.solve(v1, v2));
}

इनपुट

[1,5,8], [2,3,6,9]

आउटपुट

5

  1. C++ प्रोग्राम, S की माध्यिका के निकटतम k संख्याएँ ज्ञात करने के लिए, जहाँ S, n संख्याओं का समुच्चय है

    यह एक C++ प्रोग्राम है जो K संख्याओं को S की माध्यिका के सबसे निकट पाता है, जहाँ S, n संख्याओं का एक समूह है। एल्गोरिदम Begin    function partition() for partitioning the array on the basis of values at high as pivot value:    Arguments:       a[]=an array.  

  1. सी ++ प्रोग्राम ग्राफ में दो नोड्स के बीच पथ खोजने के लिए

    इस कार्यक्रम में हम दिए गए ग्राफ पर डीएफएस का उपयोग करके पता लगा सकते हैं कि क्या दो नोड्स के बीच पथ मौजूद है। एल्गोरिदम Begin    function isReach() is a recursive function to check whether d is reachable to s :    A) Mark all the vertices as unvisited.    B) Mark the c

  1. C++ प्रोग्राम बाइनरी सर्च एप्रोच का उपयोग करके दो सॉर्ट किए गए सरणियों के माध्यिका को खोजने के लिए

    हम द्विआधारी खोज दृष्टिकोण का उपयोग करके दो क्रमबद्ध सरणियों के माध्यिका को खोजने के लिए एक C++ प्रोग्राम विकसित करेंगे। एल्गोरिदम Begin    Function median() with both the arrays and the start and end indexes of each array, which have two arrays and their respective elements as argument. &