পাইথনে ঠিক k জাম্পে শেষ দ্বীপে পৌঁছানোর জন্য একটি লাফের ন্যূনতম সর্বোচ্চ দৈর্ঘ্য খুঁজুন


ধরুন আমাদের কাছে সংখ্যার একটি অ্যারে আছে, A-তে i-তম সংখ্যা হল সেই অবস্থান যেখানে একটি দ্বীপ রয়েছে, এবং আরেকটি পূর্ণসংখ্যা k দেওয়া হয়েছে (1 ≤ k

সুতরাং, যদি ইনপুটটি হয় A =[7, 20, 41, 48], k =2, তাহলে আউটপুট হবে 28, কারণ শেষ দ্বীপে পৌঁছানোর দুটি উপায় আছে 7 থেকে 20 থেকে 48, এখানে সর্বাধিক দূরত্ব যেকোনো দুটি পরপর দ্বীপের মধ্যে 48 থেকে 20 অর্থাৎ 28। এবং 7 থেকে 41 থেকে 48 এখানে যে কোনো দুটি পরপর দ্বীপের মধ্যে সর্বোচ্চ দূরত্ব হল 41 থেকে 7 এর মধ্যে অর্থাৎ 34। সুতরাং, 28 এবং 34-এর সর্বনিম্ন 28।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন সংজ্ঞায়িত করুন isPossible()। এটি arr,dist, k

    লাগবে
  • n :=arr এর আকার

  • অনুরোধ :=0

  • বর্তমান :=0

  • আগের :=0

  • 0 থেকে n রেঞ্জের জন্য, করুন

    • যদিও বর্তমান n এবং (arr[বর্তমান] - arr[পূর্ববর্তী]) <=dist, do

      এর মত নয়
      • বর্তমান :=বর্তমান + 1

    • req :=req + 1

    • যদি বর্তমান n এর মত হয়, তাহলে

      • লুপ থেকে বেরিয়ে আসুন

    • পূর্ববর্তী :=বর্তমান - 1

  • যদি কারেন্ট n এর মত না হয়, তাহলে

    • রিটার্ন ফলস

  • যদি req <=k, তাহলে

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

  • রিটার্ন ফলস

  • প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -

  • n :=arr এর আকার

  • বাম :=0

  • ডানে :=অ্যারের শেষ উপাদান

  • উত্তর :=0

  • যখন বাম -=ডান, কর

    • মধ্য :=(বাম + ডান) / 2;

    • যদি isPossible(arr, mid, k) অ-শূন্য হয়, তাহলে

      • উত্তর :=মধ্য

      • ডান:=মধ্য - 1

    • অন্যথায়,

      • বাম :=মধ্য + 1

  • উত্তর ফেরত দিন

উদাহরণ

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

def isPossible(arr,dist, k) :
   n = len(arr)
   req = 0
   current = 0
   previous = 0
   for i in range(0, n):
      while (current != n and (arr[current] - arr[previous]) <= dist):
         current += 1
      req += 1
      if (current == n):
         break
      previous = current - 1
   if (current != n):
      return False
   if (req <= k):
      return True
   return False
def minimum_distance(arr, k):
   n = len(arr)
   left = 0
   right = arr[-1]
   ans = 0
   while (left <= right):
      mid = (left + right) // 2;
      if (isPossible(arr, mid, k)):
         ans = mid
         right = mid - 1
      else:
         left = mid + 1
   return ans
arr = [7, 20, 41, 48]
k = 2
print(minimum_distance(arr, k))

ইনপুট

[7, 20, 41, 48] , 2

আউটপুট

28

  1. Android

    অ্যান্ড্রয়েডে Linkify Textview কি?

  2. CSS

    IE 8 এবং তার কম সহ সমস্ত ওয়েব ব্রাউজারগুলির জন্য CSS চিত্রের অস্বচ্ছতা

  3. C++

    কিভাবে আপনার কম্পিউটার থেকে ওপেনসিভিতে C++ ব্যবহার করে ভিডিও লোড করবেন?

  4. C++

    C++ এ পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করে বাইনারি গাছের সমস্ত লিফ নোড বাম থেকে ডানে মুদ্রণ করুন

  • C প্রোগ্রামিং
  •   
  • C++
  •   
  • Redis
  •   
  • BASH প্রোগ্রামিং
  •   
  • Python
  •   
  • Java
  •   
  • তথ্যশালা
  •   
  • HTML
  •   
  • JavaScript
  •   
  • প্রোগ্রামিং
  •   
  • CSS
  •   
  • Ruby
  •   
  • SQL
  •   
  • IOS
  •   
  • Android
  •   
  • mongodb
  •   
  • MySQL
  •   
  • C#
  •   
  • PHP
  •   
  • SQL সার্ভার