মান লেযিয়ে একটি পূর্ণসংখ্যা অ্যারে 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