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

C++-এ লংগেস্ট ইন্টারভাল: শুধু একটি সংখ্যা ধারণকারী সর্বোচ্চ রেঞ্জ

বিভিন্ন পূর্ণসংখ্যার একটি অ্যারে দেওয়া আছে। সর্বোচ্চ আকারের ইন্টারভাল [start, end] বের করুন যাতে সেটি অ্যারেতে শুধু একটি সংখ্যা ধারণ করে (অথবা শূন্য)। রেঞ্জ ১ থেকে ১০০,০০০ পর্যন্ত।

উদাহরণ

ইনপুট: [10, 6, 20]

সোর্টেড: [6, 10, 20]

সম্ভাব্য ইন্টারভাল:

  • [1, 5] → আকার ৫ (কোনো সংখ্যা নেই)
  • [7, 9] → আকার ৩ (কোনো সংখ্যা নেই)
  • [11, 19] → আকার ৯ (শুধু ২০ নেই, ১১-১৯ শূন্য)
  • [21, 100000] → আকার ৯৯৯৮০ (শুধু ২০ নেই)

আউটপুট: 99990

C++ বাস্তবায়ন

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

class Solution {
public:
    int solve(vector<int>& nums) {
        int ret = INT_MIN;
        int end = 100000;
        int prev = 1;
        sort(nums.begin(), nums.end());
        int n = nums.size();
        
        for (int i = 0; i < n; i++) {
            int high = (i + 1 < n) ? nums[i+1] - 1 : end;
            int low = (i - 1 >= 0) ? prev + 1 : prev;
            prev = nums[i];
            ret = max(ret, high - low + 1);
        }
        return ret;
    }
};

int main() {
    Solution ob;
    vector<int> v = {10, 6, 20};
    cout << ob.solve(v);
    return 0;
}

লজিক ব্যাখ্যা

সোর্টেড অ্যারেতে প্রতিটি সংখ্যার মাঝপথে যে গ্যাপগুলো থাকে, সেগুলোই 候選 ইন্টারভাল। এন্ড পয়েন্টগুলো হ্যান্ডেল করতে prev ভ্যারিয়েবল ব্যবহার করা হয়েছে।

  1. Frugal সংখ্যা চেক করা (C++)

  2. C++ দিয়ে পেন্টাটপ (Pentatope) সংখ্যা বের করা

  3. C++ তে অ্যারে রিপ্রেজেন্টেড সংখ্যার সাথে ১ যোগ করা

  4. C++-এ একটি ইন্টিজারর ওন'স কমপ্লিমেন্ট খুঁজে বের করা