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

C++ में डुप्लिकेट III समस्या


मान लीजिए हमारे पास पूर्णांकों की एक सरणी है, हमें जांचना है कि क्या सरणी में दो अलग-अलग सूचकांक i और j मौजूद हैं जैसे कि nums[i] और nums[j] के बीच निरपेक्ष अंतर अधिकतम t है, और i और j के बीच निरपेक्ष अंतर अधिकतम k है। उदाहरण के लिए, यदि इनपुट [1,2,3,1] है, k=3 और t=0, तो true वापस करें।

हल करने के चरण

  • एक सेट s बनाएं, n := nums सरणी का आकार

  • i को 0 से n-1 तक लूप करें

    • x, nums[i] से शुरू होने वाले सेट तत्व का सूचकांक है

    • यदि x सेट की सीमा में नहीं है और x का मान <= nums[i] + t है, तो true वापस करें

    • यदि x पहला तत्व नहीं है

      • x := अगला तत्व

      • यदि x से शुरू होने वाला t-वां तत्व >= nums[i] है, तो true वापस करें

    • nums[i] को s में डालें, फिर nums[i-k] को s से हटाएं

  • false वापस करें

उदाहरण (C++)

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

#include <bits/stdc++.h> using namespace std; class Solution {    public:    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {       multiset <int> s;       int n = nums.size();       for(int i = 0; i< n; i++){          multiset <int> :: iterator x = s.lower_bound(nums[i]);          if(x != s.end() && *x <= nums[i] + t ) return true;             if(x != s.begin()){                x = std::next(x, -1);                if(*x + t >= nums[i])return true;             }             s.insert(nums[i]);             if(i >= k){                s.erase(nums[i - k]);             }          }          return false;       } }; main(){    Solution ob;    vector<int> v = {1,2,3,1};    cout << (ob.containsNearbyAlmostDuplicate(v, 3,0)); }

इनपुट

[1,2,3,1] 3 0

आउटपुट

1
  1. C++ में हाउस रॉबर III C++ में हाउस रॉबर III

    मान लीजिए एक चोर ने अपनी चोरी के लिए एक नई जगह ढूंढ ली है। इस क्षेत्र में केवल एक प्रवेश द्वार है, प्रवेश द्वार को रूट कहा जाता है। रूट के अलावा, प्रत्येक घर का एक और केवल एक पैरेंट घर होता है। एक दौरे के बाद, स्मार्ट चोर को लगा कि इस जगह के सभी घर एक बाइनरी ट्री बनाते हैं। और यदि दो सीधे-लिंक्ड घरो

  1. C++ में पाथ सम III - रूट से लीफ तक दिए गए योग वाले पाथ ढूंढना C++ में पाथ सम III - रूट से लीफ तक दिए गए योग वाले पाथ ढूंढना

    मान लीजिए हमारे पास एक बाइनरी ट्री है जिसमें प्रत्येक नोड एक पूर्णांक मान रखता है। हमें उन पाथ को ढूंढना है जिनका योग दिए गए मान के बराबर हो। पाथ रूट से लीफ तक होना चाहिए। समस्या विवरण यदि ट्री है [5,4,8,11,null,13,4,7,2,null,null,5,1] और योग 22 है, तो परिणाम होगा - पाथ हैं: [[5,4,11,2],[5,8,4,5]

  1. C++ में बाइनरी ट्री में आकार 2 या अधिक के डुप्लिकेट सबट्री हैं या नहीं जांचें C++ में बाइनरी ट्री में आकार 2 या अधिक के डुप्लिकेट सबट्री हैं या नहीं जांचें

    समस्या विवरण बाइनरी ट्री में आकार 2 या अधिक के डुप्लिकेट सबट्री हैं या नहीं जांचें। हल: ट्री सीरियलाइजेशन + हैशिंग प्रत्येक सबट्री को स्ट्रिंग के रूप में सीरियलाइज़ करें (नल के लिए $ मार्कर) सीरियलाइज्ड स्ट्रिंग्स को हैश सेट में स्टोर करें यदि कोई नॉन-लीफ सबट्री पहले से सेट में है → डुप्लिकेट मिल