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

C++ में दो सॉर्टेड ऐरे की माध्यिका


मान लीजिए हमारे पास दो ऐरे हैं; ये ऐरे सॉर्टेड हैं। इसलिए हमें इन दो ऐरे की माध्यिका ढूंढनी है। यदि ऐरे [1,5,8] और [2,3,6,9] हैं, तो उत्तर 5 होगा।

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

इस समस्या को हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  • findMedianSortedArrays नामक एक फ़ंक्शन परिभाषित करें, जो nums1 और nums2 ऐरे लेता है
  • यदि nums1 का आकार > nums2 का आकार, तो:
    • फंक्शन को वापस कॉल करें findMedianSortedArrays(nums2, nums1)
  • x := nums1 का आकार, y := nums2 का आकार
  • low := 0, high := x
  • totalLength := x + y
  • जब तक low <= high:
    • partitionX := low + (high - low) / 2
    • partitionY := (totalLength + 1) / 2 - partitionX
    • maxLeftX = -inf जब partitionX 0 हो, अन्यथा nums1[partitionX-1]
    • minRightX = inf जब partitionX x हो, अन्यथा nums1[partitionX]
    • maxLeftY = -inf जब partitionY 0 हो, अन्यथा nums2[partitionY-1]
    • minRightY = inf जब partitionY y हो, अन्यथा nums2[partitionY]
    • यदि maxLeftX <= minRightY और maxLeftY <= minRightX, तो:
      • यदि totalLength % 2 == 0, तो:
        • (max(maxLeftX, maxLeftY) + min(minRightX, minRightY)) / 2 वापस करें
      • अन्यथा:
        • max(maxLeftX, maxLeftY) वापस करें
    • अन्यथा जब maxLeftX > minRightY, तो:
      • high := partitionX - 1
    • अन्यथा low := partitionX + 1
  • 0 वापस करें

उदाहरण (C++ कोड)

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

#include <bits/stdc++.h> 
using namespace std; 
class Solution { 
public: 
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { 
        if(nums1.size() > nums2.size()) 
            return findMedianSortedArrays(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; 
    } 
}; 
int main(){ 
    Solution ob; 
    vector<int> v1 = {1,5,8}, v2 = {2,3,6,9}; 
    cout << (ob.findMedianSortedArrays(v1, v2)); 
}

इनपुट

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

आउटपुट

5
  1. - दो क्रमबद्ध सरणियों की माध्यिका

    माध्यिका मध्य संख्या होती है, दूसरे शब्दों में, माध्यिका मान एक क्रमबद्ध सूची में मध्य अवलोकन होता है। यह 50% के संचयी प्रतिशत से मेल खाता है। दोनों सरणियों का आकार समान होना चाहिए। हम पहले प्रत्येक सरणी की अलग-अलग माध्यिका ज्ञात करेंगे, फिर उन अलग-अलग माध्यिकाओं की तुलना करके दोनों सूचियों की वास्

  1. C/C++ में मल्टीडायमेंशनल ऐरे C/C++ में मल्टीडायमेंशनल ऐरे

    C/C++ में, मल्टीडायमेंशनल ऐरे को सरल शब्दों में ऐरे के ऐरे के रूप में परिभाषित किया जाता है। मल्टीडायमेंशनल ऐरे में डेटा टेबुलर फॉर्म में स्टोर होता है (रो मेजर ऑर्डर में)। निम्नलिखित डायग्राम 3 x 3 x 3 डायमेंशन वाले मल्टीडायमेंशनल ऐरे के लिए मेमोरी आवंटन रणनीति दिखाता है। एल्गोरिदम Begin ऐर

  1. - C++ में दो अनसॉर्टेड सरणियों को सॉर्ट क्रम में मर्ज करना

    समस्या कथन एक फ़ंक्शन लिखें जो दो अनसॉर्टेड सरणियों को लेता है और उन्हें एक नई सरणी में सॉर्ट क्रम में मर्ज करता है। arr1[] = {10, 5, 7, 2} arr2[] = {4, 17, 9, 3} result[] = {2, 3, 4, 5, 7, 9, 10, 17} एल्गोरिदम 1. दो अनसॉर्टेड सरणियों को नई सरणी में मर्ज करें 2. नव निर्मित सरणी को सॉर्ट करें C++ उ