ধরুন আমাদের কাছে জোড় দৈর্ঘ্যের একটি অ্যারে সংখ্যা আছে আরেকটি মান সীমা। এক পদক্ষেপে, আমরা সংখ্যা থেকে যেকোনো মানকে 1 এবং সীমার মধ্যে অন্য মান দিয়ে প্রতিস্থাপন করতে পারি, অন্তর্ভুক্ত। অ্যারেটিকে পরিপূরক বলা হয় যদি সমস্ত সূচক i, nums[i] + nums[n-1-i] একই সংখ্যার সমান হয়। তাই আমাদেরকে সংখ্যার পরিপূরক করার জন্য প্রয়োজনীয় নূন্যতম সংখ্যক চাল খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি nums =[1,4,2,3] limit =4 এর মত হয়, তাহলে আউটপুট হবে 1 কারণ এক চালে আমরা সূচক 1 থেকে 2 এ উপাদান তৈরি করতে পারি, তাই অ্যারে হবে [1,2] ,2,3], তারপর nums[0] + nums[3] =4, nums[1] + nums[2] =4, nums[2] + nums[1] =4, nums[3] + nums[ 0] =4
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=সংখ্যার আকার
- মধ্য :=n/2 এর ভাগফল
- zero_moves :=পূর্ণসংখ্যা টাইপের মানের একটি খালি মানচিত্র
- শুরু করুন :=আকারের একটি অ্যারে (2 * সীমা + 1), এবং 0 দিয়ে পূরণ করুন
- শেষ :=আকারের একটি অ্যারে (2 * সীমা + 1), এবং 0 দিয়ে পূরণ করুন
- res :=অসীম
- আমি 0 থেকে মধ্য - 1 রেঞ্জের জন্য, কর
- x :=সংখ্যা[i]
- y :=সংখ্যা[n - 1 - i]
- zero_moves[x + y] :=zero_moves[x + y] + 1
- শুরু [1 + ন্যূনতম x, y] 1 দ্বারা বাড়ান
- শেষ [সীমা + সর্বোচ্চ x, y] 1 দ্বারা বাড়ান
- ব্যবধান :=0
- পরিসীমা 2 থেকে সীমা*2 এর মধ্যে লক্ষ্যের জন্য, করুন
- ব্যবধান :=অন্তর + শুরু[লক্ষ্য]
- খরচ :=2 *(মধ্য - ব্যবধান) + ব্যবধান - শূন্য_চল[লক্ষ্য]
- res :=ন্যূনতম রেস এবং খরচ
- ব্যবধান :=অন্তর - শেষ[লক্ষ্য]
- রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from collections import defaultdict
def solve(nums, limit):
n = len(nums)
mid = n // 2
zero_moves = defaultdict(int)
start = [0] * (2 * limit + 1)
end = [0] * (2 * limit + 1)
res = float('inf')
for i in range(mid):
x = nums[i]
y = nums[n - 1 - i]
zero_moves[x + y] += 1
start[min(x, y) + 1] += 1
end[max(x, y) + limit] += 1
intervals = 0
for target in range(2, limit * 2 + 1):
intervals += start[target]
cost = 2 * (mid - intervals) + intervals - zero_moves[target]
res = min(res, cost)
intervals -= end[target]
return res
nums = [1,4,2,3]
limit = 4
print(solve(nums, limit)) ইনপুট
[1,4,2,3], 4
আউটপুট
1