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

C++ में डुप्लीकेट III शामिल है


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

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

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

  • मैं के लिए 0 से n - 1 की सीमा में

    • x अंक [i] और ऊपर से शुरू होने वाले सेट तत्व की अनुक्रमणिका है

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

    • अगर x पहला तत्व नहीं है

      • x :=अगला तत्व यादृच्छिक के रूप में

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

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

  • झूठी वापसी

उदाहरण(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

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

  1. सी++ में पथ योग III

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

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

    विचार करें कि हमारे पास एक बाइनरी ट्री है। हमें यह पता लगाना है कि पेड़ में आकार 2 या उससे अधिक के कुछ डुप्लिकेट सबट्री हैं या नहीं। मान लीजिए हमारे पास नीचे जैसा एक बाइनरी ट्री है - आकार 2 के दो समान उपप्रकार हैं। हम ट्री क्रमांकन और हैशिंग प्रक्रिया का उपयोग करके इस समस्या को हल कर सकते हैं। वि