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

সাবলিস্ট মুছে দিয়ে k-এর চেয়ে ছোট ও বড় উপাদান সমান রাখা C++-এ


একটি সংখ্যা লিস্ট nums এবং একটি সংখ্যা k দেওয়া আছে। আমরা hoogসত একটি সাবলিস্ট মুছে ফেলতে পারি। লক্ষ্য হল ফলাফল লিস্টে k-এর চেয়ে স্ট্রিক্টলি ছোট এবং বড় উপাদানগুলো সমান হয় এমন সবচেয়ে লম্বা লিস্টের দৈর্ঘ্য বের করা।

প্রিফিক্স সম দিয়ে সমাধান: ছোট হলে +1, বড় হলে -1। শেষ প্রিফিক্স সম = delta। delta=0 হলে পুরো লিস্টই উত্তর। অন্যথায় ম্যাপ দিয়ে সাবঅ্যারে খুঁজে বের করা হয়।

উদাহরণ

ইনপুট: nums = [6,10,8,9,3,5], k = 6

আউটপুট: ৫

ব্যাখ্যা: সাবলিস্ট [9] মুছে দিলে [6,10,8,3,5] পাওয়া যায়। ছোট: ৩,৫ (২টি), বড়: ১০,৮ (২টি)।

C++ কোড উদাহরণ
#include 
using namespace std;

class Solution {
public:
    int solve(vector& nums, int k) {
        vector v(nums.size() + 1, 0);
        int cnt = 0;
        for (int i = 0; i < nums.size(); ++i) {
            if (nums[i] < k) ++cnt;
            else if (nums[i] > k) --cnt;
            v[i + 1] = cnt;
        }
        if (v.back() == 0) return nums.size();
        int delta = v.back();
        map m;
        int ans = INT_MAX;
        for (int i = 1; i <= v.size(); ++i) {
            if (m[v[i] - v.back()] != 0 || v[i] - v.back() == 0) {
                ans = min(ans, i - m[v[i] - v.back()]);
            }
            m[v[i]] = i;
        }
        if (ans == INT_MAX) return 0;
        else return nums.size() - ans;
    }
};

int main(){
    Solution ob;
    vector v = {6, 10, 8, 9, 3, 5};
    int k = 6;
    cout << ob.solve(v, k);
    return 0;
}
আউটপুট

উপরোক্ত কোড রান করলে আউটপুট:

5
  1. C++ প্রোগ্রাম: অ্যারে উপাদানগুলোর গুণফল বের করা

  2. C++-এ std::string এবং int ক্যাটেনেট করা

  3. C++ প্রোগ্রাম: বড় সংখ্যক এলিমেন্টে কুইক সোর্ট করা

  4. বাইনারি থেকে অক্টাল এবং অক্টাল থেকে বাইনারি রূপান্তরের C++ প্রোগ্রাম