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

সি++-এ অ্যারেতে nums[i] < nums[k] < nums[j] আকারের ট্রিপলেট খুঁজে বের করার প্রোগ্রাম


সমস্যা বিবরণ

একটি সংখ্যার তালিকা nums দেওয়া আছে। চেক করতে হবে কি এমন ট্রিপলেট (i, j, k) আছে যাতে i < j < k এবং nums[i] < nums[k] < nums[j]।

উদাহরণ: nums = [2, 12, 1, 4, 4] হলে আউটপুট True (১), কারণ [2, 12, 4] এর জন্য 2 < 4 < 12।

সমাধানের পদ্ধতি

  1. left[i] অ্যারে তৈরি করুন যাতে left[i] = min(nums[0...i]) থাকে।
  2. স্ট্যাক ব্যবহার করে ডান পাশ থেকে ট্রভার্স করুন।
  3. প্রতিটি i এর জন্য x = left[i-1] নিন।
  4. স্ট্যাকে থেকে x-এর চেয়ে ছোট বা সমান উপাদান পপ করুন।
  5. যদি স্ট্যাক খালি না হয় এবং x < nums[i] এবং nums[i] > st.top() হয়, তবে ট্রিপলেট পাওয়া গেছে — true রিটার্ন করুন।
  6. nums[i] স্ট্যাকে পুশ করুন।
  7. শেষে false রিটার্ন করুন।

উদাহরণ কোড

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

class Solution {
public:
    bool solve(vector<int>& nums) {
        int n = nums.size();
        vector<int> left(n);
        left[0] = nums[0];
        for (int i = 1; i < n; i++)
            left[i] = min(nums[i], left[i - 1]);

        stack<int> st;
        for (int i = n - 1; i >= 1; i--) {
            int x = left[i - 1];
            while (!st.empty() && st.top() <= x)
                st.pop();
            if (!st.empty() && x < nums[i] && nums[i] > st.top())
                return true;
            st.push(nums[i]);
        }
        return false;
    }
};

int main() {
    vector<int> v = {2, 12, 1, 4, 4};
    cout << solve(v);
    return 0;
}

ইনপুট ও আউটপুট

ইনপুট: {2, 12, 1, 4, 4}

আউটপুট: 1

  1. C++-এ ডাবলি লিংকড লিস্টের আকার (Size) বের করার প্রোগ্রাম

  2. পাইথনে লিফ নোডের তালিকা থেকে ন্যূনতম যোগফল वाले ট্রি বের করার প্রোগ্রাম

  3. পাইথনে লিস্ট থেকে অ্যারিথমেটিক সাবসিকোয়েন্সের সংখ্যা বের করার প্রোগ্রাম

  4. পাইথনে লিস্ট থেকে N বড় এলিমেন্ট বের করা