কম্পিউটার

পাইথনে অ্যারেকে পরিপূরক করার জন্য ন্যূনতম চাল খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের কাছে জোড় দৈর্ঘ্যের একটি অ্যারে সংখ্যা আছে আরেকটি মান সীমা। এক পদক্ষেপে, আমরা সংখ্যা থেকে যেকোনো মানকে 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

  1. পাইথনে B-এর আগে A-কে তৈরি করতে ন্যূনতম সংখ্যক অক্ষর মুছে ফেলার জন্য প্রোগ্রাম

  2. পাইথন প্রোগ্রামে অ্যারের সমষ্টি খুঁজুন

  3. অ্যারের যোগফল খুঁজে পেতে পাইথন প্রোগ্রাম

  4. একটি 2D অ্যারেতে k'th ক্ষুদ্রতম উপাদান খুঁজে পেতে পাইথন প্রোগ্রাম