ধরুন আমরা একটি অ্যারে সংখ্যা আছে. আমরা অ্যারের যেকোন উপাদানে যে কোনো সংখ্যক বার দুই ধরনের অপারেশন করতে পারি
-
জোড় উপাদানের জন্য, এটিকে 2 দ্বারা ভাগ করুন
-
বিজোড় উপাদানের জন্য, এটিকে 2 দ্বারা গুণ করুন।
এখন অ্যারের বিচ্যুতি হল অ্যারের যেকোনো দুটি উপাদানের মধ্যে সর্বোচ্চ পার্থক্য। আমাদের কিছু সংখ্যক অপারেশন করার পর অ্যারের সর্বনিম্ন বিচ্যুতি খুঁজে বের করতে হবে। সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[6,3,7,22,5], তাহলে আউটপুট হবে 5 কারণ আমরা আমাদের অ্যারে তৈরি করতে পারি। একটি অপারেশন [6,6,7,22,5] এবং দ্বিতীয় অপারেশন [6,6,7,22,10], এবং আরেকটি অপারেশন [6,6,7,11,10], এখন বিচ্যুতি হল 11- ৬ =৫।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
তালিকার সংখ্যাগুলি সাজান
-
max_v :=সংখ্যার সর্বোচ্চ উপাদান
-
min_v :=সংখ্যার সর্বনিম্ন উপাদান
-
হিপিফাই সংখ্যা
-
res :=max_v - min_v
-
যখন সংখ্যা [0] বিজোড় হয়, কর
-
v :=হিপ কিউ সংখ্যা থেকে পোপ করা উপাদান
-
v :=2 * v
-
হিপ কিউ সংখ্যায় ভি সন্নিবেশ করান
-
min_v :=সংখ্যা[0]
-
max_v :=সর্বাধিক v এবং max_v
-
res :=ন্যূনতম res এবং (max_v - min_v)
-
-
সংখ্যা :=n এবং ঋণাত্মক ক্রমে সমস্ত সংখ্যার একটি তালিকা
-
heapify হিপ সারি সংখ্যা
-
সংখ্যা[0] জোড় হলে, করুন
-
v :=-(হিপ সারি সংখ্যা থেকে পোপ করা উপাদান)
-
v :=(v/2)
এর ভাগফল -
হিপ কিউ সংখ্যায় -v সন্নিবেশ করুন
-
max_v :=-সংখ্যা[0]
-
min_v :=সর্বনিম্ন min_v এবং v
-
res :=ন্যূনতম res এবং (max_v - min_v)
-
-
রিটার্ন রিটার্ন
উদাহরণ
আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি
import heapq def solve(nums): nums.sort() max_v,min_v = nums[-1],nums[0] heapq.heapify(nums) res = max_v-min_v while nums[0]%2==1: v = heapq.heappop(nums) v = 2 * v heapq.heappush(nums, v) min_v = nums[0] max_v = max(v, max_v) res = min(res, max_v - min_v) nums = [-n for n in nums] heapq.heapify(nums) while nums[0]%2==0: v = -heapq.heappop(nums) v = v // 2 heapq.heappush(nums, -v) max_v = -nums[0] min_v = min(min_v,v) res = min(res, max_v - min_v) return res nums = [6,3,7,22,5] print(solve(nums))
ইনপুট
[6,3,7,22,5]
আউটপুট
5