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

C++ में ऐरे से पॉइंट चुनें ताकि न्यूनतम दूरी अधिकतम हो


इस समस्या में, हमें n तत्वों का एक ऐरे arr[] दिया गया है जो N इंडेक्स पोजीशन को दर्शाता है और C मैग्नेट हैं। हमारा कार्य इन सभी मैग्नेट को इस तरह रखना है कि दो निकटतम मैग्नेट के बीच की दूरी जितना संभव हो उतनी बड़ी हो।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट - ऐरे = {1, 4, 6, 12, 28, 44} C = 4

आउटपुट - 11

इस समस्या को हल करने के लिए, हम अधिकतम दूरी खोजने के लिए बाइनरी सर्च का उपयोग करेंगे। हम एक अधिकतम दूरी तय करेंगे और फिर 0 से अधिकतम दूरी के बीच सभी मैग्नेट रखना वैध है या नहीं जांचेंगे।

फिर हम मध्य मान खोजने के लिए बाइनरी सर्च लागू करेंगे और जांचेंगे कि मैग्नेट रखना संभव है या नहीं। यदि हां, तो मैग्नेट रखें और मिड को अधिकतम दूरी मानकर उसी प्रक्रिया का पालन करें।

उदाहरण

हमारे समाधान के कार्यान्वयन को दर्शाने वाला प्रोग्राम,

#include <iostream>
using namespace std;

bool canPlace(int arr[], int n, int C, int mid) {
    int magnet = 1, currPosition = arr[0];
    for (int i = 1; i < n; i++) {
        if (arr[i] - currPosition >= mid) {
            magnet++;
            currPosition = arr[i];
            if (magnet == C)
                return true;
        }
    }
    return false;
}

int minDistMax(int n, int C, int arr[]) {
    int lo, hi, mid, ans;
    lo = 0;
    hi = arr[n - 1];
    ans = 0;
    while (lo <= hi) {
        mid = (lo + hi) / 2;
        if (!canPlace(arr, n, C, mid))
            hi = mid - 1;
        else {
            ans = max(ans, mid);
            lo = mid + 1;
        }
    }
    return ans;
}

int main() {
    int C = 4;
    int arr[] = {1, 4, 6, 12, 28, 44};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "अधिकतम न्यूनतम दूरी है " << minDistMax(n, C, arr);
    return 0;
}

आउटपुट

अधिकतम न्यूनतम दूरी है 11
  1. - C++ में सरणी को संतुलित बनाने के लिए जोड़ा जाने वाला न्यूनतम मान ज्ञात करें

    मान लीजिए हमारे पास n तत्वों की एक सरणी A है। और n सम है। हमें वह मान ढूंढना है जो सरणी को संतुलित करने के लिए आवश्यक है। चूंकि सरणी का आकार सम है, तो हम दो हिस्से बना सकते हैं। बाएं आधे का योग और दाएं आधे का योग संतुलित होना चाहिए। इसलिए यदि सरणी A = [1, 2, 3, 2, 5, 3] की तरह है, तो बाएं आधे का योग

  1. - C++ में सरणी में उन जोड़ों की संख्या ढूंढना जिनका XOR 0 है

    मान लीजिए हमारे पास n तत्वों की एक सरणी है; हमें सरणी में उन जोड़ों की संख्या ढूंढनी है जिनका XOR 0 होगा। जोड़ी (x, y) जिसका XOR 0 है, तो x = y। इसे हल करने के लिए हम सरणी को सॉर्ट कर सकते हैं, फिर यदि दो लगातार तत्व समान हैं, तो काउंट बढ़ाएं। यदि सभी तत्व समान हैं, तो अंतिम काउंट गिना नहीं जा सकता

  1. - C++ में ऐरे में न्यूनतम संख्या जोड़कर योग को सम बनाना

    मान लीजिए एक ऐरे है जिसमें कुछ संख्याएं हैं। हमें बताना है कि न्यूनतम कितनी संख्याएं जोड़ने से तत्वों का योग सम हो जाएगा। संख्या 0 से बड़ी होनी चाहिए। इसलिए यदि तत्वों का योग विषम है, तो हम 1 जोड़ेंगे, लेकिन यदि योग पहले से सम है, तो हम 2 जोड़कर इसे सम बनाएंगे। एल्गोरिदम addMinNumber(arr) begin