কম্পিউটার টিউটোরিয়াল

C++-এ কন্টেইনস ডুপ্লিকেট III


একটি পূর্ণসংখ্যার অ্যারে দেওয়া থাকলে, দুটি ভিন্ন ইনডেক্স i এবং j খুঁজে বের করতে হবে যাতে |nums[i] - nums[j]| <= t এবং |i - j| <= k।

উদাহরণ: nums = [1,2,3,1], k = 3, t = 0 হলে আউটপুট true।

সমাধানের ধাপসমূহ

  • একটি মাল্টিসেট s ব্যবহার করুন।
  • প্রতিটি উপাদানের জন্য lower_bound দিয়ে সবচেয়ে কাছের বড় বা সমান মান খুঁজুন।
  • যদি পার্থক্য <= t হয়, true রিটার্ন করুন।
  • পূর্বের উপাদানও চেক করুন।
  • সেটে বর্তমান উপাদান যোগ করুন এবং i >= k হলে nums[i-k] মুছে দিন।

C++ উদাহরণ

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

class Solution {
public:
    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
        multiset<long long> s;
        int n = nums.size();
        for (int i = 0; i < n; i++) {
            auto it = s.lower_bound((long long)nums[i] - t);
            if (it != s.end() && *it - nums[i] <= t) return true;
            s.insert(nums[i]);
            if (i >= k) s.erase(nums[i - k]);
        }
        return false;
    }
};

int 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 সমস্যা সমাধান

  2. C++-এ হাউস রবার III

  3. C++-এ পাথ সম III

  4. C++-এ একটি বাইনারি ট্রিতে ডুপ্লিকেট সাবট্রি (সাইজ ২ বা অধিক) আছে কিনা চেক করা