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

সি++-এ স্মলেস্ট রেঞ্জ II (Smallest Range II)


মান লেযিয়ে একটি পূর্ণসংখ্যা অ্যারে A দেওয়া আছে, প্রতিটি A[i]-র জন্য x = -K বা x = K বেছে নিতে হবে এবং A[i]-র সাথে x যোগ করতে হবে (শুধু একবার)। এই প্রক্রিয়ার পর আমরা একটি অ্যারে B পাব। B-এর সর্বাধিক মান এবং সর্বনিম্ন মানের পার্থক্যের সম্ভাব্য সর্বনিম্ন মান খুঁজে বের করতে হবে। A = [0,10], K = 2 হলে আউটপুট ৬, কারণ B = [2,8]।

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -

  • ret := 0, n := A.size()

  • অ্যারে A সর্ট করুন

  • ret := A[n-1] - A[0]

  • right := A[n-1] - K, left := A[0] + K

  • i = 0 থেকে n-2 পর্যন্ত লুপ চালান

    • mx := max(A[i] + K, right)

    • mn := min(A[i+1] - K, left)

    • ret := min(ret, mx - mn)

  • ret রিটার্ন করুন

নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int smallestRangeII(vector<int>& A, int k) {       int ret = 0;       int n = A.size();       sort(A.begin(), A.end());       ret = A[n - 1] - A[0];       int mx, mn;       int right = A[n - 1] - k;       int left = A[0] + k;       for(int i = 0; i < n - 1; i++){          mx = max(A[i] + k, right);          mn = min(A[i + 1] - k, left);          ret = min(ret, mx - mn);       }     return ret;    } }; main(){    vector<int> v = {0, 10};    Solution ob;    cout << (ob.smallestRangeII(v, 2)); }

ইনপুট

[0,10] 2

আউটপুট

6

  1. C++-এ নির্দিষ্ট রেঞ্জে সবচেয়ে ছোট ফ্যাক্টর K হয় এমন সংখ্যা গণনা

  2. C++-এ অ্যারেতে রেঞ্জের গড় (Mean of Range in Array)

  3. নির্দিষ্ট রেঞ্জে সেট বিট কপি করা C++-এ

  4. পাইথনে স্মলেস্ট রেঞ্জ I