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

C++ में संयोग खोज (Coincidence Search)


मान लीजिए हमारे पास अद्वितीय पूर्णांकों की एक सूची nums है। हमें उन पूर्णांकों की संख्या ज्ञात करनी है जिन्हें मानक बाइनरी खोज का उपयोग करके सफलतापूर्वक खोजा जा सकता है।

उदाहरण के लिए, यदि इनपुट है [2, 6, 4, 3, 10], तो आउटपुट 3 होगा, क्योंकि यदि हम 4 को खोजने के लिए बाइनरी खोज का उपयोग करते हैं, तो हम इसे पहली पुनरावृत्ति में पा सकते हैं। हम 2 और 10 को दो पुनरावृत्तियों के बाद भी पा सकते हैं।

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

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

  • एक फ़ंक्शन help() परिभाषित करें जो target और सरणी nums लेता है।
    • low := 0
    • high := nums का आकार - 1
    • while low <= high:
      • mid := low + (high - low) / 2
      • यदि nums[mid] == target, तो true लौटाएं
      • यदि nums[mid] < target, तो low := mid + 1
      • अन्यथा high := mid - 1
    • false लौटाएं
  • मुख्य विधि से:
    • ret := 0
    • nums में प्रत्येक तत्व i के लिए:
      • ret := ret + help(i, nums)
    • ret लौटाएं

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

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

class Solution {
public:
    bool help(int target, vector<int>& nums) {
        int low = 0;
        int high = nums.size() - 1;
        while (low <= high) {
            int mid = low + (high - low) / 2;
            if (nums[mid] == target)
                return true;
            if (nums[mid] < target) {
                low = mid + 1;
            } else {
                high = mid - 1;
            }
        }
        return false;
    }
    
    int solve(vector<int>& nums) {
        int ret = 0;
        for (int i : nums) {
            ret += help(i, nums);
        }
        return ret;
    }
};

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

इनपुट

{2, 6, 4, 3, 10}

आउटपुट

3
  1. C++ में बाइनरी सर्च ट्री इटरेटर C++ में बाइनरी सर्च ट्री इटरेटर

    मान लीजिए हम बाइनरी ट्री के लिए एक इटरेटर बनाना चाहते हैं। दो मेथड होंगे। अगला एलिमेंट लौटाने के लिए next() मेथड, और बूलियन मान लौटाने के लिए hasNext() मेथड, जो इंगित करेगा कि अगला एलिमेंट मौजूद है या नहीं। तो यदि ट्री इस तरह है −और फंक्शन कॉल्स का अनुक्रम [next(), next(), hasNext(), next(), h

  1. C++ में बाइनरी ट्री को बाइनरी सर्च ट्री में रूपांतरण C++ में बाइनरी ट्री को बाइनरी सर्च ट्री में रूपांतरण

    एक बाइनरी ट्री एक विशेष प्रकार का ट्री है जिसमें ट्री का प्रत्येक नोड अधिकतम दो चाइल्ड नोड रख सकता है। इन चाइल्ड नोड्स को राइट चाइल्ड और लेफ्ट चाइल्ड के नाम से जाना जाता है। एक साधारण बाइनरी ट्री है - बाइनरी सर्च ट्री (BST) एक विशेष प्रकार का ट्री है जो निम्नलिखित नियमों का पालन करता है - बाएं चाइ

  1. C++ में बाइनरी खोज प्रोग्राम C++ में बाइनरी खोज प्रोग्राम

    बाइनरी खोज क्या है? बाइनरी खोज (आधा-अंतराल खोज) एक खोज एल्गोरिदम है जो क्रमबद्ध सरणी में लक्ष्य मान की स्थिति ढूंढता है। यह लक्ष्य मान की तुलना मध्य तत्व से करता है और खोज स्थान को आधा कर देता है। मुख्य बिंदु केवल क्रमबद्ध सरणी पर काम करता है समय जटिलता: O(log n) दुनिया के सभी नाम क्रमबद्ध हों तो